HikariCP默认启用连接有效性检查,只需配置connection-test-query(如MySQL用SELECT 1)和validation-timeout(建议3000–5000ms),连接在borrow前自动验证,无需额外开关;同时需协同设置maxLifetime(

HikariCP 的验证查询配置
HikariCP 不再使用传统的 testOnBorrow 类参数,而是默认启用连接有效性检查,只需配对两个关键项:
-
connection-test-query(YAML)或 setConnectionTestQuery()(Java API):指定验证 SQL。MySQL 用
SELECT 1,PostgreSQL 可用SELECT 1或SELECT NOW(),Oracle 必须用SELECT 1 FROM DUAL - validation-timeout(默认 5000ms):单次验证语句执行超时时间,建议设为 3000–5000ms,避免阻塞获取连接
注意:HikariCP 在连接从池中取出前(getConnection())自动校验,无需额外开启开关;若连接刚创建或空闲过久,也会触发验证。
Druid 的验证查询配置
Druid 提供更细粒度的控制,需同时设置验证语句与触发策略:
-
validationQuery:必须非空,例如
SELECT 1(MySQL)、SELECT 1 FROM DUAL(Oracle) - testOnBorrow:true 表示每次借连接前校验(最严格,有轻微性能开销)
-
testWhileIdle:true 表示空闲连接在被回收器扫描时校验(依赖
timeBetweenEvictionRunsMillis,默认 60 秒) - testOnReturn:一般不建议开启,归还时校验会增加延迟
推荐组合:testOnBorrow=true + testWhileIdle=true,兼顾即时性与后台兜底。
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
立即学习“Java免费学习笔记(深入)”;
验证查询选型要点
不是所有 SQL 都适合做验证查询,需满足三个条件:
-
无副作用:不能修改数据、不触发事务、不锁表(
SELECT 1安全,SELECT COUNT(*) FROM huge_table不行) - 低开销:数据库能快速响应,不走索引、不查真实业务表
-
语法兼容:必须能在目标数据库中合法执行(如 Oracle 强制要求
FROM DUAL)
常见数据库推荐语句:
- MySQL / MariaDB:
SELECT 1 - PostgreSQL:
SELECT 1或SELECT NOW() - Oracle:
SELECT 1 FROM DUAL - SQL Server:
SELECT 1 - H2 / HSQLDB:
SELECT 1
配套参数不能忽略
只配验证查询还不够,必须协同调整生命周期参数,否则验证可能失效:
-
maxLifetime(HikariCP)或 maxEvictableIdleTimeMillis(Druid):应比数据库的
wait_timeout(MySQL 默认 8 小时)少至少 30 秒,避免连接被服务端静默关闭 - idleTimeout(HikariCP):空闲连接最大保留时间,建议设为 10 分钟左右,配合验证机制及时清理陈旧连接
-
keepAliveTime(HikariCP 5.0+):启用后定期发送心跳(如 MySQL 的
SELECT 1),主动维持长连接活跃,适合高延迟或中间件环境

















