Java连接池空闲连接回收时间由具体实现决定,HikariCP用idleTimeout(默认10分钟),Druid和Tomcat JDBC Pool用minEvictableIdleTimeMillis(默认30分钟),均需合理配置避免数据库超时断连。

Java 中连接池的空闲连接回收时间,主要由具体使用的连接池实现决定,不是 JDBC 规范统一规定的。主流连接池(如 HikariCP、Druid、Tomcat JDBC Pool)都提供了明确配置项来控制空闲连接何时被清理。
HikariCP:用 idleTimeout
HikariCP 通过 idleTimeout 控制连接在池中空闲多久后被回收(单位:毫秒)。默认值是 600000(10 分钟),设为 0 表示永不回收(但受 maxLifetime 约束)。
- 必须小于 maxLifetime(否则无效)
- 建议值:3~5 分钟(即 180000 ~ 300000),避免数据库端因超时主动断连导致连接失效
- 配置示例(application.yml):
spring:
datasource:
hikari:
idle-timeout: 300000
Druid:用 minEvictableIdleTimeMillis
Druid 使用 minEvictableIdleTimeMillis(单位:毫秒)定义连接可空闲的最短时间,超过后可能被后台线程回收。默认 1800000(30 分钟)。
- 需配合 timeBetweenEvictionRunsMillis(检测间隔,默认 60000)才能生效
- 若后者为 0 或负数,空闲检测不运行,空闲连接不会被回收
- 推荐组合:前者设为 5~10 分钟,后者设为 30~60 秒
Tomcat JDBC Pool:用 minEvictableIdleTimeMillis
与 Druid 同名参数,含义一致。同样依赖 timeBetweenEvictionRunsMillis 触发检测。
- 注意:该池默认不启用空闲检测(testWhileIdle=false 且 timeBetweenEvictionRunsMillis≤0)
- 要启用回收,至少设置:timeBetweenEvictionRunsMillis=30000 和 minEvictableIdleTimeMillis=300000
通用建议
- 空闲时间不宜过长(如 >15 分钟),否则容易遇到数据库连接超时(MySQL 默认 wait_timeout=28800 秒即 8 小时,但很多中间件或云数据库更短)
- 也不宜过短(如
- 务必确认数据库服务端的连接空闲超时设置,并让连接池的空闲回收时间比它短 1~2 分钟
- 开启连接有效性验证(如 validationQuery 或 connection-test-query)可进一步保障连接可用性
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











