SpringBoot 数据库连接池配置(HikariCP)最佳实践
在 SpringBoot 里数据库连接池早就不是可选项从 2.x 版本开始SpringBoot 已经把HikariCP设为默认连接池它以“极快、轻量、稳定”著称也是目前线上最主流的选择。本篇文章就来讲讲HikarcCP的配置参数、调优思路、注意事项。一、为什么用 HikariCP• 官方默认无需额外引入• 性能吊打 C3P0、DBCP2、Tomcat-JDBC• 轻量无锁设计高并发下表现极稳• 配置简单坑少• 支持监控、动态调整二、依赖默认已集成只要引入 JDBC / MyBatis / JPA 就自动包含dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-jdbc/artifactId /dependency三、相关配置信息application.ymlspring: datasource: url: jdbc:mysql://localhost:3306/testdb?useUnicodetruecharacterEncodingutf-8serverTimezoneAsia/ShanghaiuseSSLfalseallowPublicKeyRetrievaltrue username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver # HikariCP 核心配置生产最佳实践 hikari: # 连接池名字便于监控 pool-name: HikariCP-Pool # 最小空闲连接建议 最大连接减少波动 minimum-idle: 10 # 最大连接数核心根据业务压测调整一般 10~30 足够 maximum-pool-size: 20 # 自动提交 auto-commit: true # 连接最大存活时间毫秒必须小于 MySQL wait_timeout默认 8 小时 max-lifetime: 300000 # 连接超时时间获取连接等待超时时间 connection-timeout: 5000 # 空闲连接检测周期 idle-timeout: 60000 # 测试连接是否可用的查询语句 connection-test-query: SELECT 1四、关键参数详解1. maximum-pool-size 最大连接数• 不是越大越好• 单实例推荐10~30• CPU 密集型小一点• IO 密集型大量查询可适当加大• 公式参考连接数 ((核心数 * 2) 有效磁盘数)2. max-lifetime 连接最大生命周期• 必须 MySQL 的 wait_timeout默认 8 小时• 建议设为5 分钟 ~ 10 分钟• 防止连接被 MySQL 主动断开而池里不知道3. connection-timeout获取连接等待超时时间建议3~5 秒避免请求无限阻塞。4. minimum-idle建议与 maximum-pool-size 相同关闭“收缩机制”更稳定。五、SpringBoot 中使用 HikariTemplateService public class UserService { Autowired private JdbcTemplate jdbcTemplate; public ListUser list() { return jdbcTemplate.query( select * from user, new BeanPropertyRowMapper(User.class) ); } }MyBatis / MyBatis-Plus 同样自动走 Hikari 连接池无需任何改动。六、查看 Hikari 监控信息Component public class HikariMonitor { Autowired private DataSource dataSource; public void showPoolState() { HikariDataSource hikari (HikariDataSource) dataSource; HikariPoolMXBean poolBean hikari.getHikariPoolMXBean(); System.out.println(活跃连接数 poolBean.getActiveConnections()); System.out.println(空闲连接数 poolBean.getIdleConnections()); System.out.println(等待连接数 poolBean.getPendingThreads()); System.out.println(总连接数 poolBean.getTotalConnections()); } }高并发排查非常有用。七、注意事项1. 获取连接超时Connection Timeout• 最大连接数太小• SQL 执行太慢占着连接不释放• 事务太长2. MySQL 8.0 连接断开• URL 加上allowPublicKeyRetrievaltrueuseSSLfalse3. 连接泄漏Connection Leak• 事务未提交/回滚• 代码未释放资源• 开启 leak-detection-threshold 监控4. 高并发下性能上不去• 调大maximum-pool-size• 检查慢SQL• 检查索引八、与其他连接池对比• HikariCP快、稳、默认首选• Druid功能强、监控全、较重• DBCP2老项目用性能一般• C3P0几乎淘汰九、总结HikariCP 是 SpringBoot 官方钦定的最强连接池配置抓住三点即可1.最大连接数合理2.max-lifetime 小于数据库超时3.超时时间不要过长或过短