目录
引言
druid是java常用的数据库连接池,如果基础网络环境和数据库端设置了空闲连接释放,特别是探活探测需要正常配置,否则会导致应用下次从连接池中拿到异常连接而报错失败:
com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
注:
参数是在以下环境测试验证:
jdk 8
druid 1.2.11
参数说明
1、基本配置
initial-size
Default: 0
初始化连接
min-idle
Default: 0
最小空闲连接
max-active
Default: 8
最大活动连接
max-wait
Default: -1
单位毫秒,获取连接时最大等待时间
2、连接生命周期
min-evictable-idle-time-millis
Default: 1800000(半个小时)
单位毫秒,只对应用刚启动,初始化的第一轮超过min-idle以外的空闲连接最大生命周期
min-evictable-idle-time-millis必须大于等于120秒,
min-evictable-idle-time-millis必须小于max-evictable-idle-time-millis
max-evictable-idle-time-millis
Default: 25200000(7个小时)
单位毫秒,空闲连接最长生命周期,超过max-evictable-idle-time-millis后重新生成的连接,包括
- 第一轮连接生命周期
- 使用过程中的连接生命周期
- 超过min-idle的空闲连接需要释放也是该参数控制
3、连接测试,探活
【新探活】
keep-alive
Default: false
在1.0.28版本之后,新加入keepAlive配置,缺省关闭。使用keepAlive功能,建议使用1.1.16或者更高版本。探活使用的是select 1操作
time-between-eviction-runs-millis
Default: 60000(1分钟)
探活周期,应用刚启动第一轮连接,或刚执行完应用请求的连接,会先需要超过120秒后才会触发探活
【旧探活】
validation-query-timeout=1
validation-query=select 1
test-on-borrow=false
test-on-return=false
test-while-idle=true
time-between-eviction-runs-millis=10000
在druid中已经不生效,使用keepAlive代替。
官网文档显示在1.0.27之前版本,是建议使用TestWhileIdle来保证连接的有效性
版本依赖修改为1.0.26
但是显示找不到,可能该方式已经被抛弃,或者理解有误
总结
#initial-size=7 #不建议配置,只在第一轮探活生效
min-idle=5 #最小连接数,因业务而定
max-active=10 #最小连接数,因业务而定
max-wait=10000 #获取连接等待时间,因业务而定
time-between-eviction-runs-millis=80000 #必须配置,配置80s,最终探活周期=80s+120s
keep-alive=true #必须配置
min-evictable-idle-time-millis=120000 #可以配置,只对第一轮配置了initial-size>min-idle的连接生效
max-evictable-idle-time-millis=1800000 #连接最大生命周期,默认7个小时
#validation-query-timeout=1
#validation-query=select 1
#test-on-borrow=false #不建议配置,影响性能
#test-on-return=false #不建议配置,影响性能
#test-while-idle=true #不建议配置,已经有keep-alive代替
参考
官方项目地址
文档、常见问题
常见问题 · alibaba/druid Wiki · GitHub
KeepAlive - 《Alibaba Druid v1.0 使用手册》 - 书栈网 · BookStack
参数列表
DruidDataSource配置属性列表 · alibaba/druid Wiki · GitHub
参数配置例子