Java生态中最流行的数据库连接池hikaricp

HikariCP 是目前 Java 生态中最流行的数据库连接池,Spring Boot 2.x 之后默认就是它。

为什么选 HikariCP?

  • 性能极高 — 号称”最快的连接池”,比 Druid、DBCP、C3P0 都快。核心原因是代码精简(不到 20KB)、去掉了所有不必要的抽象层。
  • 零开销 — 内部用字节码增强(Byte Buddy)代替反射, getConnection() 路径极短
  • 可靠 — 被 Spring Boot 官方选定为默认连接池,社区活跃,bug 修复快
  • 连接验证高效 — 用 connectionTestQueryisValid() API 做轻量检测,不会频繁打数据库

核心配置项(application.yml 示例):

1
2
3
4
5
6
7
8
9
10
11
12
13
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
hikari:
maximum-pool-size: 10 # 最大连接数(推荐 CPU核心数+1)
minimum-idle: 5 # 最小空闲连接
connection-timeout: 30000 # 获取连接超时(ms)
idle-timeout: 600000 # 空闲超时销毁(ms)
max-lifetime: 1800000 # 连接最大存活时间(ms)
connection-test-query: SELECT 1 # 连接有效性检测SQL

关键参数建议:

参数 推荐值 说明
maximum-pool-size CPU核心数 + 1 不是越大越好,太大反而争抢锁
connection-timeout 30000ms 别设太低,否则容易报错
idle-timeout 最大存活时间的 60% 释放无用连接
max-lifetime 30分钟 小于数据库的 wait_timeout

工作原理简述:

  1. 应用启动时创建 minimum-idle 个空闲连接
  2. 请求来了就从池中借连接,用完归还
  3. 池满时新请求等待 connection-timeout,超时抛异常
  4. 空闲连接超过 idle-timeout 被回收
  5. 连接超过 max-lifetime 强制销毁重建(防数据库侧断开)

Spring Boot 自动装配里已经内置了 HikariCP 的配置类 HikariDataSourceAutoConfiguration,所以只要配了 spring.datasource.*,它自动就用 HikariCP,不需要额外引入依赖。