HikariCP 的 idleTimeout 控制空闲连接回收,单位毫秒,需小于数据库 wait_timeout 并留1~5分钟缓冲,典型值5~10分钟;须配合 maxLifetime 使用以覆盖非空闲失效场景。

idleTimeout 的作用和取值逻辑
它只对“空闲状态”的连接生效,即已归还给池、尚未被借出的连接。一旦连接被应用获取并使用中,不计入 idleTimeout 计时。
推荐设置原则:
- 必须小于数据库服务器的连接空闲超时(例如 MySQL 默认是 8 小时,即 28800000 毫秒;但生产环境常设为 30 分钟~1 小时)
- 建议比数据库的 `wait_timeout` 少 1~5 分钟,留出安全缓冲
- 不能设为 0(表示禁用空闲回收),也不建议设为过小(如低于 30 秒),否则可能频繁创建销毁连接
- 典型值:300000(5 分钟)到 600000(10 分钟)之间较常见
Spring Boot 中配置 idleTimeout 的方式
在 application.properties 中添加:
spring.datasource.hikari.idle-timeout=600000
对应 YAML 格式(application.yml):
立即学习“Java免费学习笔记(深入)”;
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
spring:
datasource:
hikari:
idle-timeout: 600000
单位是毫秒。注意属性名是 idle-timeout(带短横线),不是 camelCase 形式。
代码中手动配置 HikariConfig
如果未使用 Spring Boot 自动装配,而是直接 new HikariConfig,可这样设置:
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost:3306/test");
config.setUsername("root");
config.setPassword("123");
config.setIdleTimeout(600000); // 单位:毫秒
HikariDataSource dataSource = new HikariDataSource(config);
注意:setIdleTimeout() 接收 long 类型,单位毫秒;若传入负数或 0,将禁用空闲回收(不推荐)。
配合 maxLifetime 使用更稳妥
仅靠 idleTimeout 不足以覆盖所有失效场景。比如连接一直被频繁复用、从未空闲,就永远不会被 idleTimeout 清理。这时需配合 max-lifetime(最大生命周期)一起使用:
- `max-lifetime` 控制连接从创建起最多存活多久,无论是否空闲
- 通常设为 1800000(30 分钟)到 3600000(60 分钟)
- 它的值应略小于数据库的 `interactive_timeout` 和 `wait_timeout`,且大于 `idle-timeout`
示例搭配:
spring.datasource.hikari.idle-timeout=600000 spring.datasource.hikari.max-lifetime=1800000

















