HikariCP 数据库连接池配置

HikariCP 数据库连接池配置规范(v2025-12)

适用场景:对外提供接口请求,数据库类型 PostgreSQL / MySQL / Oracle

目标:高并发、低延迟、故障隔离


1 连接池大小与分组

参数 计算公式 示例(4C8G)
minimumIdle (CPU 核数 × 2) + 磁盘数 (4×2)+2 = 10
maximumPoolSize minIdle × (2~5) 10 × 5 = 50

约束

  • 所有节点 maximumPoolSize 总和 ≤ 数据库实例最大连接数
  • 接口线程与定时任务 必须分离双连接池,避免互相挤占

2 连接可用性校验

场景 推荐做法
JDBC4 驱动(PG 42.x+) 无需 connectionTestQuery,Hikari 自动调用 isValid()
旧驱动 显式 connectionTestQuery: SELECT 1
参数 建议值 说明
maxLifetime 900 000 ms(15 min) 到期强制回收,防止"僵"连接
leakDetectionThreshold 5 000 ms 持有超 5 s 未归还即打印堆栈,方便排查泄露
复制代码
日志全是无效堆栈,真正泄露被淹没
先拿 P99 SQL 耗时 做基线,再设 leak = P99 × 2;同时把阈值做成 环境变量,灰度时可动态降

3 超时配置(生产网络稳定,宜激进)

参数 默认 建议 备注
connectionTimeout 30 000 ms 2 000 ms 拿连接最大等待
validationTimeout 5 000 ms 1 000 ms 检测连接有效性;必须 < connectionTimeout

4 JDBC 层高可用

数据库 超时参数 单位 用法示例
PostgreSQL socketTimeout jdbc:postgresql://h1,h2/db?socketTimeout=10
MySQL socketTimeout 毫秒 jdbc:mysql://h1,h2/db?socketTimeout=10000
Oracle oracle.jdbc.ReadTimeout 毫秒 连接属性单独配置

主库不可用时,驱动按 URL 列表自动 fail-over 到同城灾备节点

超时值 ≈ 接口最大 SLA,防止慢查询霸占连接


5 配置模板(YAML)

yaml 复制代码
spring:
  datasource:
    jdbc-url: jdbc:postgresql://host1:5432,host2:5432/mydb?socketTimeout=10
    username: ${DB_USER}
    password: ${DB_PWD}
    driver-class-name: org.postgresql.Driver
    hikari:
      pool-name: HikariCP_master
      minimum-idle: 10              # 见公式
      maximum-pool-size: 50         # ≤ minIdle × 5
      connection-timeout: 3000      # 3 s
      validation-timeout: 2000      # 2 s
      leak-detection-threshold: 6000 # 6 s
      max-lifetime: 900000          # 15 min
相关推荐
jiayou641 天前
KingbaseES 实战:深度解析数据库对象访问权限管理
数据库
李广坤2 天前
MySQL 大表字段变更实践(改名 + 改类型 + 改长度)
数据库
爱可生开源社区3 天前
2026 年,优秀的 DBA 需要具备哪些素质?
数据库·人工智能·dba
随逸1773 天前
《从零搭建NestJS项目》
数据库·typescript
加号34 天前
windows系统下mysql多源数据库同步部署
数据库·windows·mysql
シ風箏4 天前
MySQL【部署 04】Docker部署 MySQL8.0.32 版本(网盘镜像及启动命令分享)
数据库·mysql·docker
李慕婉学姐4 天前
Springboot智慧社区系统设计与开发6n99s526(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
百锦再4 天前
Django实现接口token检测的实现方案
数据库·python·django·sqlite·flask·fastapi·pip
tryCbest4 天前
数据库SQL学习
数据库·sql
jnrjian4 天前
ORA-01017 查找机器名 用户名 以及library cache lock 参数含义
数据库·oracle