Druid配置參數詳解


pom引入

<dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>druid</artifactId>
          <version>1.0.18</version>
</dependency>

初始化連接

在druid連接數據庫的配置文件中,讀寫datasource的bean中 要有 init-method="init". 配置,否則在啟動連接池時不會執行初始化操作。

示例:

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
.......
  </bean>

參數配置及說明

通過 spring 配置文件application-context.xml中的dataSource配置說明各個參數的配置。

屬性 說明 建議值
url 數據庫的jdbc連接地址。一般為連接oracle/mysql。示例如下:  
  mysql : jdbc:mysql://ip:port/dbname?option1&option2&…  
  oracle : jdbc:oracle:thin:@ip:port:oracle_sid  
     
username 登錄數據庫的用戶名  
password 登錄數據庫的用戶密碼  
initialSize 啟動程序時,在連接池中初始化多少個連接 10-50已足夠
maxActive 連接池中最多支持多少個活動會話  
maxWait 程序向連接池中請求連接時,超過maxWait的值后,認為本次請求失敗,即連接池 100
  沒有可用連接,單位毫秒,設置-1時表示無限等待  
minEvictableIdleTimeMillis 池中某個連接的空閑時長達到 N 毫秒后, 連接池在下次檢查空閑連接時,將 見說明部分
  回收該連接,要小於防火牆超時設置  
  net.netfilter.nf_conntrack_tcp_timeout_established的設置  
timeBetweenEvictionRunsMillis 檢查空閑連接的頻率,單位毫秒, 非正整數時表示不進行檢查  
keepAlive 程序沒有close連接且空閑時長超過 minEvictableIdleTimeMillis,則會執 true
  行validationQuery指定的SQL,以保證該程序連接不會池kill掉,其范圍不超  
  過minIdle指定的連接個數。  
minIdle 回收空閑連接時,將保證至少有minIdle個連接. 與initialSize相同
removeAbandoned 要求程序從池中get到連接后, N 秒后必須close,否則druid 會強制回收該 false,當發現程序有未
  連接,不管該連接中是活動還是空閑, 以防止進程不會進行close而霸占連接。 正常close連接時設置為true
removeAbandonedTimeout 設置druid 強制回收連接的時限,當程序從池中get到連接開始算起,超過此 應大於業務運行最長時間
  值后,druid將強制回收該連接,單位秒。  
logAbandoned 當druid強制回收連接后,是否將stack trace 記錄到日志中 true
testWhileIdle 當程序請求連接,池在分配連接時,是否先檢查該連接是否有效。(高效) true
validationQuery

檢查池中的連接是否仍可用的 SQL 語句,drui會連接到數據庫執行該SQL

默認值每種數據庫都不相同:

Mysql:SELECT 1;
SQLSERVER:SELECT 1;
ORACLE:SELECT 'x' FROM DUAL;
PostGresql:SELECT 'x';

 
  正常返回,則表示連接可用,否則表示連接不可用  
testOnBorrow 程序 申請 連接時,進行連接有效性檢查(低效,影響性能) false
testOnReturn 程序 返還 連接時,進行連接有效性檢查(低效,影響性能) false
poolPreparedStatements 緩存通過以下兩個方法發起的SQL: true
  public PreparedStatement prepareStatement(String sql)  
  public PreparedStatement prepareStatement(String sql,  
  int resultSetType, int resultSetConcurrency)  
maxPoolPrepareStatementPerConnectionSize 每個連接最多緩存多少個SQL 20
filters 這里配置的是插件,常用的插件有: stat,wall,slf4j
  監控統計: filter:stat  
  日志監控: filter:log4j 或者 slf4j  
  防御SQL注入: filter:wall  
connectProperties 連接屬性。比如設置一些連接池統計方面的配置。  
  druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000  
  比如設置一些數據庫連接屬性:  
     

 
 

注意事項

底層連接

另外還有一個參數 accessToUnderlyingConnectionAllowed. 該參數設置是否允許使用底層連接。 如果設置為true,可以使用下面的方式來獲取底層連接:

Connection conn = ds.getConnection();

Connection dconn = ((DelegatingConnection) conn).getInnermostDelegate();

...

conn.close();

默認false不開啟, 因為代碼邏輯不正確,可能會帶來風險。建議需要直接訪問驅動的特定功能時再使用,並且經過多次測試, 明確代碼每一步可能帶來的風險。

空閑檢查問題

在使用阿里的SLB時,建議將timeBetweenEvictionRunsMillis設置為2秒或者負值(關閉檢查機制)。否則,連接進程會報:

Could not open JDBC Connection for transaction; nested exception is com.mysql.jdbc.exceptions.jdbc4.CommunicaiotnsException: Communications link failure

不同配置文件

其中 spring boot application.properties 中的配置最為完整,建議參考。

jdbc中配置連接池

jdbc.properties:
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://172.49.15.55:3306/testdb?useUnicode=true&amp;characterEncoding=utf-8
jdbc.username=test
jdbc.password=test
jdbc.filters=stat
jdbc.maxActive=300
jdbc.initialSize=2
jdbc.maxWait=60000
jdbc.minIdle=1
jdbc.timeBetweenEvictionRunsMillis=60000
jdbc.minEvictableIdleTimeMillis=300000
jdbc.validationQuery=SELECT 'x'
jdbc.testWhileIdle=true
jdbc.testOnBorrow=false
jdbc.testOnReturn=false
jdbc.poolPreparedStatements=false
jdbc.maxPoolPreparedStatementPerConnectionSize=50

spring中配置druid

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
      <!-- ”連接“的基本屬性  -->
      <property name="url" value="jdbc_url" />
      <property name="username" value="${jdbc_user}" />
      <property name="password" value="${jdbc_password}" />
      <!-- 連接池屬性 -->
      <property name="initialSize" value="100" />
      <property name="maxActive" value="1000" />
      <property name="maxWait" value="60000" />
      <property name="minEvictableIdleTimeMillis" value=300000 />
      <property name="keepAlive" value=true />
      <property name="timeBetweenEvictionRunsMillis" value=-1 />
      <property name="minIdle" value="20" />
      <property name="removeAbandoned" value="true"/>
      <property name="removeAbandonedTimeout" value="180"/>
      <property name="logAbandoned" value="true" />
      <property name="testWhileIdle" value="true" />
      <property name="validationQuery" value="SELECT 'x'" />
      <property name="testOnBorrow" value="false" />
      <property name="testOnReturn" value="false" />
      <property name="poolPreparedStatements" value="true"/>
      <property name="maxPoolPreparedStatementPerConnectionSize" value="20"/>
      <property name="filters" value="stat,wall,slf4j"/>
      <property name="connectionProperties" value="druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000" />
</bean>

spring boot application.properties配置

spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#驅動配置信息
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#基本連接信息
spring.datasource.username = root
spring.datasource.password = root
spring.datasource.url=jdbc:mysql://192.168.153.23:3306/mytest?useUnicode=true&characterEncoding=utf-8

#連接池屬性
spring.datasource.druid.initial-size=15
spring.datasource.druid.max-active=100
spring.datasource.druid.min-idle=15
spring.datasource.druid.max-wait=60000
spring.datasource.druid.time-between-eviction-runs-millis=60000
spring.datasource.druid.min-evictable-idle-time-millis=300000
spring.datasource.druid.test-on-borrow=false
spring.datasource.druid.test-on-return=false
spring.datasource.druid.test-while-idle=true
spring.datasource.druid.validation-query=SELECT 1
spring.datasource.druid.validation-query-timeout=1000
spring.datasource.druid.keep-alive=true
spring.datasource.druid.remove-abandoned=true
spring.datasource.druid.remove-abandoned-timeout=180
spring.datasource.druid.log-abandoned=true
spring.datasource.druid.pool-prepared-statements=true
spring.datasource.druid.max-pool-prepared-statement-per-connection-size=20
spring.datasource.druid.filters=stat,wall,slf4j
spring.datasource.druid.use-global-data-source-stat=true
spring.datasource.druid.preparedStatement=true
spring.datasource.druid.maxOpenPreparedStatements=100
spring.datasource.druid.connect-properties.mergeSql=true
spring.datasource.druid.connect-properties.slowSqlMillis=5000

 

轉自:https://www.cnblogs.com/halberd-lee/p/11304790.html

 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM