HikariCP是Spring Boot 2.0+默认连接池,性能、稳定性与轻量性最优,生产环境首选;需按数据库能力调优maximumPoolSize、minimumIdle等核心参数,并启用健康检测、JMX/Micrometer监控及泄漏防护。

选型优先考虑 HikariCP
生产环境首选 HikariCP,它在性能、稳定性与轻量性上综合表现最优。Spring Boot 2.0+ 默认集成 HikariCP,无需额外依赖;若用旧版本或非 Spring 项目,显式引入 hikari-cp 即可。避免使用已停止维护的连接池(如 BoneCP),也不建议为“熟悉”而选用 DBCP 或 C3P0 —— 它们在高并发下易出现连接泄漏、初始化慢、监控缺失等问题。
核心参数必须按场景调优
默认配置仅适合开发,上线前务必根据数据库能力与业务压力调整关键参数:
-
maximumPoolSize:设为数据库最大连接数的 70%~80%,例如 MySQL 默认
max_connections=151,池上限建议设为120;再结合单机 QPS 与平均响应时间估算实际所需连接数 -
minimumIdle:建议设为
maximumPoolSize的 30%~50%,避免突发流量时频繁创建连接;但不宜过高,否则空闲连接占用数据库资源 -
connectionTimeout:设为
30000(30 秒),防止应用卡在获取连接上;配合上游超时(如 Feign、Nginx)做分层兜底 -
idleTimeout 和 maxLifetime:分别设为
600000(10 分钟)和1800000(30 分钟),确保连接在被数据库主动断开前先由池回收,避免Connection reset异常
必须启用连接健康检测与监控
光靠参数不够,要让连接池“看得见、管得住”:
- 开启 connectionTestQuery(MySQL 推荐
SELECT 1)或更优的 validationTimeout + keepaliveTime(HikariCP 3.2.1+ 支持后台保活),防止 DNS 变更、网络闪断导致的失效连接被复用 - 通过 HikariDataSource 的
getHikariPoolMXBean()暴露 JMX 指标,或集成 Micrometer 接入 Prometheus,重点关注activeConnections、idleConnections、threadsAwaitingConnection和connectionCreationFailures - 日志级别设为
DEBUG时,Hikari 会输出连接获取/归还/泄漏检测等关键事件,线上可临时打开排查问题
代码层规避常见反模式
连接池能力再强,也架不住错误用法:
立即学习“Java免费学习笔记(深入)”;
- 绝不手动调用
connection.close()后还继续使用该 Connection —— 必须确保try-with-resources或显式finally归还;Spring 管理的JdbcTemplate或 MyBatis 会自动处理,但原生 JDBC 需严格检查 - 避免在事务外长期持有连接(如流式读取大结果集未及时关闭 Statement/ResultSet),容易触发连接泄漏检测(Hikari 默认
leakDetectionThreshold=0,建议设为60000即 60 秒) - 不同数据源(如主库、从库、第三方 DB)必须使用独立连接池实例,禁止共用同一 DataSource,否则路由、熔断、限流策略无法生效


















