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,否则会失效

相关推荐
Themberfue13 分钟前
SQL ①-数据库 || MySQL
数据库·sql·mysql·数据库系统·数据库管理系统
非 白14 分钟前
【Java】代理模式
java·开发语言·代理模式
Good Note24 分钟前
Golang的静态强类型、编译型、并发型
java·数据库·redis·后端·mysql·面试·golang
m0_7482365840 分钟前
跟据spring boot版本,查看对应的tomcat,并查看可支持的tomcat的版本范围
spring boot·后端·tomcat
web151173602231 小时前
Spring Boot项目中解决跨域问题(四种方式)
spring boot·后端·dubbo
RisingWave中文开源社区1 小时前
一文详解物化视图(MV):定义、优势和用例
数据库·sql·数据分析
我就是我3521 小时前
记录一次SpringMVC的406错误
java·后端·springmvc
向哆哆1 小时前
Java应用程序的跨平台性能优化研究
java·开发语言·性能优化
木谷羊宫切割1 小时前
玩机日记 12 群晖部署AList并配置SSL,安装opkg,使用rclone挂载到本地
服务器·网络协议·ssl
PingCAP1 小时前
TiDB Chat2Query 深度解析:我们如何打造一款更高效、准确的智能 SQL 生成工具?
数据库