druid 參數配置詳解

druid 參數配置詳解

1 初始化鏈接

在druid鏈接數據庫的配置文件中,讀寫datasource的bean中 要有 init-method="init". 配置,不然在啓動鏈接池時不會執行初始化操做。 示例: css

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

2 參數配置及說明

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

屬性 說明 建議值
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, 若是  
  正常返回,則表示鏈接可用,不然表示鏈接不可用  
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  
  好比設置一些數據庫鏈接屬性:  
     
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
....
</bean>

3 注意事項

3.1 底層鏈接

另外還有一個參數 accessToUnderlyingConnectionAllowed. 該參數設置是否容許使用底層鏈接。 若是設置爲true,可使用下面的方式來獲取底層鏈接: java

Connection conn = ds.getConnection();

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

...

conn.close();

默認false不開啓, 由於代碼邏輯不正確,可能會帶來風險。建議須要直接訪問驅動的特定功能時再使用,而且通過屢次測試, 明確代碼每一步可能帶來的風險。 python

3.2 空閒檢查問題

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

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

4 不一樣配置文件

本部分只經過示例的方式展現在不一樣的環境中進行配置的語法格式,具體要配置哪些參數,請參照 參數配置及說明. spring

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

4.1 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

4.2 springs中配置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>

4.3 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

Author: halberd.leeshell

Created: 2019-09-11 Wed 01:02數據庫

Validate緩存

相關文章
相關標籤/搜索