Druid连接池最小连接数设置失效问题

问题发现:

配置

当项目启动后

线程池确实是初始化了5条连接,但是当项目运行一段时间后,5条连接确消失了,只会程序用到得时候,再去初始化连接,这样有点违背了参数设置得意义,后来通过查阅资料发现

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

总结

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

问题解决:

借助keepAlive参数,默认情况下,此参数为false。开启keepAlive,每隔一段时间进行心跳检查,这样就可以初始化空闲时间了。

但是keepAlive是有心跳间隔时间得,默认为60s,可以对系统参数设置keepAliveBetweenTimeMillis值,指定心跳间隔时间。

注意:keepAliveBetweenTimeMillis设置值不能少于minEvictableIdleTimeMillis、maxEvictableIdleTimeMillis,否则会失效

相关推荐
Violet_Stray8 分钟前
mac下载、使用mysql
数据库·mysql·macos
2401_8956108212 分钟前
Java 后端基础 Maven
java·开发语言·maven
小峰编程18 分钟前
Python函数——万字详解
linux·运维·服务器·开发语言·前端·网络·python
努力学习的明26 分钟前
Spring Bean 生命周期中设计模式的应用与解析
java·spring·设计模式·生命周期
薯条不要番茄酱37 分钟前
【SpringBoot】从零开始全面解析SpringMVC (三)
java·spring boot·后端
liweiweili1261 小时前
解决 MySQL 错误 1356 (HY000)
数据库·mysql
IDRSolutions_CN1 小时前
PDF 合并测试:性能与内容完整性
java·经验分享·pdf·软件工程·团队开发
杨凯凡1 小时前
MySQL函数触发:函数处理与触发器自动化应用
数据库·mysql
TDengine (老段)1 小时前
TDengine 在新能源领域的价值
java·大数据·数据库·人工智能·时序数据库·tdengine·涛思数据
helloworld工程师1 小时前
Java实现PDF加水印功能:技术解析与实践指南
java·开发语言·pdf