个人随笔
目录
Druid配置参数详解-maxEvictableIdleTimeMillis,minEvictableIdleTimeMillis(转)
2021-06-01 15:21:35

Druid配置参数详解-maxEvictableIdleTimeMillis,minEvictableIdleTimeMillis

Druid是一个由阿里开源的数据库连接池,Druid的配置非常丰富,但是设置不当会对生产环境造成严重影响,网上Druid的资料虽多,但大部分都是互相复制粘贴,有很多不准确甚至完全错误的描述,Druid已经开源很久,而且作者WenShao的工作重心也已经不在Druid上,有些功能估计他自己都不太了解了。本系列将从源代码的角度分析Druid目前的最新版本(1.1.21)各个常用的配置项的具体含义以及是怎么起作用的。

画外音:目前Druid在开源中国举办的2019年度最受欢迎中国开源软件中排名第7名,支持Druid的朋友可以去投票哇。2019年度最受欢迎中国开源软件

连接池是怎么判断一条连接是Idle状态的?
就是通过这两个参数进行判断的

minEvictableIdleTimeMillis:最小空闲时间,默认30分钟,如果连接池中非运行中的连接数大于minIdle,并且那部分连接的非运行时间大于minEvictableIdleTimeMillis,则连接池会将那部分连接设置成Idle状态并关闭;也就是说如果一条连接30分钟都没有使用到,并且这种连接的数量超过了minIdle,则这些连接就会被关闭了。
maxEvictableIdleTimeMillis:最大空闲时间,默认7小时,如果minIdle设置得比较大,连接池中的空闲连接数一直没有超过minIdle,这时那些空闲连接是不是一直不用关闭?当然不是,如果连接太久没用,数据库也会把它关闭,这时如果连接池不把这条连接关闭,系统就会拿到一条已经被数据库关闭的连接。为了避免这种情况,Druid会判断池中的连接如果非运行时间大于maxEvictableIdleTimeMillis,也会强行把它关闭,而不用判断空闲连接数是否小于minIdle;
这两参数是怎么起作用的?
这两参数是在DestroyTask的shrink方法中用来判断连接是不是应该被关闭的。

  1. //关闭条件,空闲时间大于minEvictableIdleTimeMillis,并且空闲连接大于minIdle,
  2. // 其中checkCount为poolingCount - minIdle,即可能被关闭的连接数量
  3. //或者空闲时间大于maxEvictableIdleTimeMillis
  4. if (idleMillis >= minEvictableIdleTimeMillis) {
  5. if (checkTime && i < checkCount) {
  6. evictConnections[evictCount++] = connection;
  7. continue;
  8. } else if (idleMillis > maxEvictableIdleTimeMillis) {
  9. evictConnections[evictCount++] = connection;
  10. continue;
  11. }
  12. }

总结

  • minEvictableIdleTimeMillis连接空闲时间大于该值并且池中空闲连接大于minIdle则关闭该连接
  • maxEvictableIdleTimeMillis连接空闲时间大于该值,不管minIdle都关闭该连接

作者:codeimport
链接:https://www.jianshu.com/p/be9dbe640daf
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 1822

啊!这个可能是世界上最丑的留言输入框功能~


当然,也是最丑的留言列表

有疑问发邮件到 : suibibk@qq.com 侵权立删
Copyright : 个人随笔   备案号 : 粤ICP备18099399号-2