一、整合步骤(最简单方式)
spring boot 2.0+ 默认使用 hikaricp,所以只需:
- 引入 jdbc 驱动(如 mysql)
- 在
application.yml或application.properties中配置数据源参数
示例 maven 依赖(以 mysql 为例):
<dependency>
<groupid>mysql</groupid>
<artifactid>mysql-connector-java</artifactid>
<scope>runtime</scope>
</dependency>
<dependency>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-starter-jdbc</artifactid>
</dependency>无需单独引入 hikaricp,spring boot 已自带。
二、yaml 配置示例(含完整参数)
spring:
datasource:
# 基本连接信息
url: jdbc:mysql://localhost:3306/testdb?usessl=false&servertimezone=asia/shanghai
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.driver
# hikaricp 专属配置(spring.datasource.hikari 前缀)
hikari:
# 连接池名称(便于监控)
pool-name: myhikaripool
# 最大连接数(默认10,根据业务峰值调整)
maximum-pool-size: 20
# 最小空闲连接数(默认10)
minimum-idle: 10
# 连接超时时间(毫秒,默认30000,建议>=5000)
connection-timeout: 30000
# 空闲连接超时淘汰(默认600000,10分钟)
idle-timeout: 600000
# 连接最大存活时间(默认1800000,30分钟,需小于数据库wait_timeout)
max-lifetime: 1800000
# 连接池中连接的默认自动提交模式(默认true)
auto-commit: true
# 连接测试查询(mysql通常用 select 1)
connection-test-query: select 1
# 验证连接是否有效的超时时间(默认5000)
validation-timeout: 5000
# 连接只读模式(默认false)
read-only: false
# 事务隔离级别(默认使用数据库默认级别)
# transaction-isolation: transaction_read_committed
# 连接泄露检测阈值(毫秒,0表示禁用,建议生产环境开启)
leak-detection-threshold: 60000
# 驱动数据源类名(通常无需指定,自动推断)
# data-source-class-name: com.mysql.cj.jdbc.mysqldatasource
# 更多驱动特定参数(如缓存预处理、超时等)
data-source-properties:
cacheprepstmts: true
prepstmtcachesize: 250
prepstmtcachesqllimit: 2048
useserverprepstmts: true三、properties 配置示例(对应上述)
spring.datasource.url=jdbc:mysql://localhost:3306/testdb?usessl=false&servertimezone=asia/shanghai spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.cj.jdbc.driver spring.datasource.hikari.pool-name=myhikaripool spring.datasource.hikari.maximum-pool-size=20 spring.datasource.hikari.minimum-idle=10 spring.datasource.hikari.connection-timeout=30000 spring.datasource.hikari.idle-timeout=600000 spring.datasource.hikari.max-lifetime=1800000 spring.datasource.hikari.auto-commit=true spring.datasource.hikari.connection-test-query=select 1 spring.datasource.hikari.validation-timeout=5000 spring.datasource.hikari.leak-detection-threshold=60000 spring.datasource.hikari.data-source-properties.cacheprepstmts=true spring.datasource.hikari.data-source-properties.prepstmtcachesize=250 spring.datasource.hikari.data-source-properties.prepstmtcachesqllimit=2048 spring.datasource.hikari.data-source-properties.useserverprepstmts=true
四、完整参数配置清单(按类别)
| 参数名 | 默认值 | 说明 | 推荐值 |
|---|---|---|---|
| 核心连接参数 | |||
maximum-pool-size | 10 | 池中最大连接数 | 根据 qps * 平均响应时间估算,通常 20~50 |
minimum-idle | 10 | 池中维护的最小空闲连接数 | 建议与 maximum-pool-size 一致(避免频繁创建) |
connection-timeout | 30000 | 获取连接的超时时间(ms) | 业务容忍延迟,建议 ≥5000 |
idle-timeout | 600000 | 空闲连接超时淘汰(ms,需小于 max-lifetime) | 默认即可,若空闲连接多可调小 |
max-lifetime | 1800000 | 连接最大存活时间(ms) | 必须小于数据库 wait_timeout(mysql 默认 8h) |
| 连接校验 | |||
connection-test-query | 无 | 连接验证 sql(如 select 1) | 强烈建议设置,避免断连 |
validation-timeout | 5000 | 校验查询超时(ms) | 5000 |
| 事务与性能 | |||
auto-commit | true | 是否默认自动提交 | 保持 true(spring 管理事务时会被覆盖) |
read-only | false | 是否只读连接(可路由到从库) | 根据业务设置 |
transaction-isolation | 数据库默认 | 事务隔离级别(如 transaction_read_committed) | 看业务要求 |
leak-detection-threshold | 0(禁用) | 连接泄露检测阈值(ms),超过则打印警告 | 生产建议 60000(1分钟) |
| 池状态与命名 | |||
pool-name | 自动生成 | 连接池名称(便于日志监控) | 自定义有意义的名称 |
initialization-fail-timeout | 1 | 启动时连接池初始化失败的超时(ms) | 若网络不稳可调大至 30000 |
| 驱动级优化(mysql) | |||
data-source-properties.cacheprepstmts | false | 缓存预处理语句 | true |
data-source-properties.prepstmtcachesize | 25 | 缓存 sql 数量 | 250 |
data-source-properties.prepstmtcachesqllimit | 256 | 单条 sql 最大缓存长度 | 2048 |
data-source-properties.useserverprepstmts | false | 使用服务端预处理 | true |
五、常见调优经验
连接数公式:
- 核心数 * 2 + 有效磁盘数(常规)
- 更精确:
最大连接数 = (qps峰值 / 单连接tps) * 平均响应时间(s) * 安全系数(1.5)
max-lifetime 必须小于数据库的 wait_timeout(mysql 默认 28800s),建议设为 1800000(30分钟)或更小。
leak-detection-threshold 生产环境开启,有助于发现未关闭连接,但会消耗少量性能。
mysql 驱动优化参数(data-source-properties)强烈推荐配置,可显著提升 sql 执行效率。
六、验证是否生效
在 @configuration 类中打印数据源类型:
@autowired
private datasource datasource;
@postconstruct
public void check() {
system.out.println("datasource class: " + datasource.getclass().getname());
// 输出应为 com.zaxxer.hikari.hikaridatasource
}以上就是springboot集成hikaricp连接池的简化配置方法的详细内容,更多关于springboot集成hikaricp连接池的资料请关注代码网其它相关文章!
发表评论