hikaricp是spring boot 2.x+默认高性能连接池,配置需按业务节奏调优:maximum-pool-size建议20~30,minimum-idle设为最大值的25%~50%,connection-timeout控制在10~30秒,idle-timeout和max-lifetime均应略小于mysql的wait_timeout以防假活,生产环境须开启leak-detection-threshold并监控连接水位与获取耗时。

Java 应用连接 MySQL,不配连接池就等于裸奔——每次查询都新建连接,光握手认证就要 50–200ms;而用好连接池,取连接只要不到 1ms。关键不是堆参数,而是让连接“够用、好用、省着用”。下面直击实操重点。
选对连接池:HikariCP 是当前最优解
HikariCP 是 Spring Boot 2.x+ 默认连接池,零依赖、启动快、性能稳,比 Druid 轻量,比 C3P0 快 3–5 倍。除非你明确需要 Druid 的监控大盘或 SQL 防火墙,否则首选 HikariCP。
- 加 Maven 依赖(注意版本对齐):
com.zaxxer
HikariCP
5.1.0
同时确保 MySQL 驱动是 8.3.0 或更高(mysql-connector-j),避免时区、SSL 兼容问题。 - Spring Boot 中只需配置
application.yml,无需写 Java 初始化代码:
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
hikari:
maximum-pool-size: 20
minimum-idle: 5
connection-timeout: 30000
idle-timeout: 600000
max-lifetime: 1800000
核心参数怎么设:按业务节奏来调
别照抄网上“最大 100”,连接池大小必须匹配你的应用并发模型和数据库承载力。
-
maximum-pool-size:不是越大越好。先估算峰值 QPS × 平均 SQL 执行耗时(秒)。例如:每秒 100 请求,每个请求平均占连 0.2 秒 → 理论需约 20 个连接。再留 20% 余量,设为 24。超过 30–40 请同步确认 MySQL 的
max_connections是否足够(默认仅 151,建议设为容器数 × 每容器池大小 + 100)。 -
minimum-idle:保持常驻空闲连接数,避免突发流量时频繁建连。一般设为
maximum-pool-size的 25%–50%,比如最大 20,最小 idle 就设 5–10。 -
connection-timeout:获取连接超时,建议 10–30 秒。太短会频繁报
Unable to acquire JDBC Connection;太长会让线程卡死。它要略大于数据库wait_timeout(默认 8 小时,但建议设为 30 分钟)。 -
idle-timeout / max-lifetime:防止连接老化失效。idle-timeout 控制空闲连接多久回收(如 10 分钟),max-lifetime 控制连接总存活时间(如 30 分钟),两者都应略小于 MySQL 的
wait_timeout,避免拿回已断开的连接。
连接有效性必须验证
网络闪断、MySQL 主从切换、防火墙超时都会导致连接“假活”。光靠超时不够,得主动探活。
- HikariCP 推荐用
connection-test-query: SELECT 1(MySQL 专用轻量语句),不要用isValid()(部分驱动实现低效)。 - 开启
keepalive-time(HikariCP 5.0+ 支持),自动在空闲连接上发心跳,比 query 更省资源。 - 生产环境务必开启
leak-detection-threshold(如 60000 毫秒),及时发现未 close 的 Connection,防泄漏。
监控与验证:别只配不看
配完不监控,等于没配。重点关注三项指标:
-
active / idle 连接数:用 Actuator + Prometheus 查
hikaricp.connections.active和.idle。长期 active 接近 maximum,说明池子小了;idle 长期为 0,说明 minimum-idle 设低了或流量不均。 - connection acquisition wait time:平均获取连接耗时。若持续 > 5ms,说明竞争激烈,需扩容或优化 SQL 执行时长。
- create / destroy 次数:高频创建销毁意味着连接复用率低,可能是超时设置不合理或存在泄漏。
可在 Spring Boot Actuator 的 /actuator/metrics/hikaricp.connections.acquire 下实时观测。上线前做一次压测,观察连接池水位和 DB Threads_connected 变化是否平稳。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











