Spring Boot默认使用HikariCP但默认配置不适用于生产环境,必须调优核心参数:maximum-pool-size建议10~30并参考(CPU核心数×2)+磁盘阵列数估算;connection-timeout应设为3000~5000ms;minimum-idle宜与maximum-pool-size一致以避免重建延迟;必开leak-detection-threshold(如20000ms)防连接泄漏;max-lifetime须小于MySQL wait_timeout,推荐300000~600000ms;需结合Actuator监控连接池实时状态。

Spring Boot 项目默认就用 HikariCP,不用额外引入依赖,但**默认配置不能直接上生产**。真正提升数据库性能的关键,不是堆参数,而是让连接池稳定、及时响应、不泄漏、不拖慢业务。
核心参数必须调,别信默认值
Spring Boot 2.x+ 默认 maximum-pool-size=10,connection-timeout=30000(30秒),这两个值在生产环境极易引发雪崩:
-
maximum-pool-size:单应用实例建议设为 10~30。盲目设成 50 或 100,数据库连接数会先被打满,MySQL 出现大量
Sleep连接,CPU 和锁争用飙升;可参考公式(CPU核心数 × 2) + 磁盘阵列数初步估算 - connection-timeout:必须压缩到 3000~5000ms(3~5秒)。微服务链路中等 30 秒,上游早熔断了,线程池会被卡死,最终触发 OOM
-
minimum-idle:建议与
maximum-pool-size相同(比如都设为 20),关闭“收缩机制”,避免空闲时连接被回收、再用时又要重建,带来延迟抖动
防连接泄漏,线上必开检测
连接没被正确 close 是最隐蔽的性能杀手。一个请求拿了连接却因异常或逻辑疏漏没归还,池子就少一个可用连接。高并发下几分钟就能耗尽。
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 启用泄漏检测:
leak-detection-threshold: 20000(单位毫秒,即 20 秒),超过这个时间未归还就记录 WARN 日志并打印堆栈 - 搭配日志监控,一旦发现泄漏日志,立刻定位对应 service 方法,检查是否漏写
try-finally或没用@Transactional自动管理 - 开发阶段可在本地设更短阈值(如 5000),提前暴露问题
适配数据库生命周期,避免“假死连接”
MySQL 默认 wait_timeout=28800(8 小时),而 HikariCP 的连接如果长期空闲,可能被中间网络设备(如 K8s iptables、云厂商 SLB)悄悄断开,但池子还不知道——下次业务一取就报 Broken pipe 或 Connection reset。
-
max-lifetime 必须小于数据库
wait_timeout,推荐设为300000(5 分钟)或600000(10 分钟) -
idle-timeout 控制空闲连接保留时长,建议设为
600000(10 分钟),配合max-lifetime形成双重清理 - 容器化环境(K8s)要额外加
keepalive-timeout和心跳 SQL(如connection-test-query: SELECT 1),防止网络层静默断连
加监控,问题不再靠猜
光调参数不够,得看得见连接池实时状态:
- 引入
spring-boot-starter-actuator,开放/actuator/metrics/hikaricp.connections.*和/actuator/health - 重点关注指标:
hikaricp.connections.active(当前使用中)、.idle(空闲)、.pending(等待获取的线程数)——若 pending 持续 > 0,说明池子真不够或有泄漏 - 结合 Prometheus + Grafana 做趋势图,比如凌晨低峰期 idle 连接是否归零?高峰期 active 是否顶到 maximum?一目了然


















