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缓存

相关文章
相关标签/搜索