首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Druid 連接池生產級配置詳解:核心參數、監控防火牆與最佳實踐

     編輯:Java 綜合教學

核心配置模板 (Spring XML)

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
    <!-- 基礎連接信息 -->
    <property name="url" value="${jdbc.url}" />
    <property name="username" value="${jdbc.username}" />
    <property name="password" value="${jdbc.password}" />
    <property name="driverClassName" value="${jdbc.driver}" />

    <!-- 連接池規模 -->
    <property name="initialSize" value="10" />        <!-- 初始化連接數 -->
    <property name="minIdle" value="10" />             <!-- 最小空閒 -->
    <property name="maxActive" value="100" />          <!-- 最大活躍 -->
    <property name="maxWait" value="60000" />          <!-- 獲取連接超時(ms) -->

    <!-- 生命周期管理 -->
    <property name="timeBetweenEvictionRunsMillis" value="60000" />  <!-- 檢測間隔 -->
    <property name="minEvictableIdleTimeMillis" value="300000" /> <!-- 空閒存活最小時間 -->
    <property name="validationQuery" value="SELECT 1" />         <!-- 檢測 SQL -->
    <property name="testWhileIdle" value="true" />               <!-- 空閒時檢測 -->
    <property name="testOnBorrow" value="false" />              <!-- 借用時檢測(影響性能) -->
    <property name="testOnReturn" value="false" />              <!-- 歸還時檢測 -->

    <!-- PSCache 優化 (Oracle/PostgreSQL 建議開啟) -->
    <property name="maxOpenPreparedStatements" value="20" />
    <property name="poolPreparedStatements" value="true" />

    <!-- 防連接泄漏 -->
    <property name="removeAbandoned" value="true" />
    <property name="removeAbandonedTimeout" value="1800" /> <!-- 30分鐘 -->
    <property name="logAbandoned" value="true" />

    <!-- 監控統計 -->
    <property name="filters" value="stat,wall,slf4j" /> <!-- 統計、SQL防火牆、日志 -->
</bean>

關鍵參數深度解析

參數推薦值說明
initialSize/minIdleCPU核數 * 2預熱連接,避免冷啟動延遲
maxActive(CPU核數 * 2) + 磁盤數 * 2根據壓測調整,防止數據庫連接數耗盡
maxWait60000業務容忍度,配合熔斷器使用
validationQuerySELECT 1 / SELECT 1 FROM DUAL極輕量,MySQL/Oracle 通用
testWhileIdletrue後台線程檢測,不影響業務線程
filters: stat必開提供監控數據源,配合 Druid StatViewServlet
filters: wall生產必開SQL 注入防火牆,攔截高風險語句

監控大盤接入

<!-- web.xml 註冊監控 Servlet -->
<servlet>
    <servlet-name>DruidStatView</servlet-name>
    <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
    <init-param>
        <param-name>allow</param-name>
        <param-value>127.0.0.1,192.168.1.0/24</param-value> <!-- 白名單 -->
    </init-param>
    <init-param>
        <param-name>loginUsername</param-name>
        <param-value>admin</param-value>
    </init-param>
    <init-param>
        <param-name>loginPassword</param-name>
        <param-value>strongPassword</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>DruidStatView</servlet-name>
    <url-pattern>/druid/*</url-pattern>
</servlet-mapping>

訪問 https://host:port/druid/index.html 查看實時連接池狀態、SQL 執行統計、慢查詢排行。

Maven 依賴坐標

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.2.20</version> <!-- 檢查最新版 -->
</dependency>

為什麼選 Druid?

  • 阿里巴巴 600+ 應用生產驗證,高併發穩定性經受考驗。
  • 內置 StatFilter (性能監控) + WallFilter (SQL 防火牆) + LogFilter (日志),開箱即用。
  • 支持 removeAbandoned 自動回收泄漏連接,解決「忘記 close」導致連接池耗盡。
  • PSCache 顯著提升 Oracle/PostgreSQL 重複 PreparedStatement 性能。

避坑指南

  1. 不要同時開啟 testOnBorrow 和 testWhileIdle,前者每次借用都查數據庫,性能殺手。
  2. MySQL 8.0+ 驅動類名 為 com.mysql.cj.jdbc.Driver,舊版 com.mysql.jdbc.Driver 已棄用。
  3. Spring Boot 2.x+ 默認使用 HikariCP,若強制用 Druid 需排除 Hikari 依賴並配置 spring.datasource.type=com.alibaba.druid.pool.DruidDataSource。
  4. 定期清理 druid.filter.stat.log-slow-sql 產生的慢查詢日志,防止磁盤寫滿。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved