技术派深入理解DB连接池HikariCP
大家好,我是技术派的二哥呀!
今天由我来给大家讲一下技术派的数据库配置 HikariCP,虽然从 Spring Boot 2.x 开始,HikariCP 成为了 Spring Boot 默认的数据库连接池,意味着我们不需要额外的配置就可以使用 HikariCP,但作为有追求的技术人来说,我们不应该就此忽视 HikariCP 的存在。
这篇内容会从源码的角度来带大家看一下 HikariCP 的默认配置,以及为什么 Spring Boot 会选择 HikariCP,HikariCP 到底快在哪里?什么是线程连接池?包括 HikariCP 的核心源码解析。让大家真正能从 HikariCP 学到点什么 🤔。
HikariCP 目前在 GitHub 上已有 18k+ 的 star 了,上一次更新还是在两年前,说明已经非常稳定了(手动狗头)。

Hikari 来源于日语,也就是“光”的意思,这意味着 HikariCP 快得像光速一样!讲真,看简介(又快又简单又好用)的感觉就好像在和我的女神“汤唯”握手一样刺激和震撼。
整合 HikariCP
既然已经是 Spring Boot 的默认数据库连接池了,也就意味着不需要在 pom.xml 中引入 HikariCP 的 Maven 坐标了。在项目的终端中执行以下命令:
mvn dependency:tree
我们可以在 Mybatis-Plus 的依赖中找得到 HikariCP 的影子。

接着,在 application.yml 文件中添加数据库链接信息就好了。
database:
name: pai_coding
spring:
datasource:
# 数据库名,从配置 database.name 中获取
url: jdbc:mysql://localhost:3306/${database.name}?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: xxxxxx
如果使用的是 MySQL 数据库,记得添加 MySQL 的依赖。
mysql
mysql-connector-java
启动项目,就可以在控制台中看到 HikariCP 的连接池信息。

HikariCP 的默认配置
HikariCP 的默认配置可以在 com.zaxxer.hikari.HikariConfig 类中找得到。

下面是这些配置选项的简要说明:
- minIdle:连接池中保持的最小空闲连接数。默认值为 -1,表示将使用 maximumPoolSize 作为最小空闲连接数。
- maxPoolSize:最大连接池大小。默认值为 -1,表示将使用默认的最大连接池大小,即 10。
- maxLifetime:连接在连接池中的最长生命周期(以毫秒为单位)。默认值为 MAX_LIFETIME,即 1800000(30 分钟)。
- connectionTimeout:等待获取连接的最长时间(以毫秒为单位)。默认值为 CONNECTION_TIMEOUT,即 30000(30 秒)。
- validationTimeout:连接验证超时时间(以毫秒为单位)。默认值为 VALIDATION_TIMEOUT,即 5000(5 秒)。
- idleTimeout:连接空闲超过此时间(以毫秒为单位)后,将从连接池中删除。默认值为 IDLE_TIMEOUT,即 600000(10 分钟)。
- initializationFailTimeout:连接池初始化失败的超时时间(以毫秒为单位)。默认值为 1,表示初始化失败时立即抛出异常。
- isAutoCommit:是否自动提交。默认值为 true,表示连接池中的连接会自动提交事务。
- keepaliveTime:连接的保活时间(以毫秒为单位)。默认值为 DEFAULT_KEEPALIVE_TIME,即 0,表示禁用保活功能。
搞清楚了这些配置项,我们就很容易针对不同的项目来改变默认的配置,比如说下面是一个高并发项目的链接配置。
spring:
datasource:
# 数据库名,从配置 database.name 中获取
url: jdbc:mysql://localhost:3306/${database.name}?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: xxxxx
hikari:
pool-name: HighConcurrencyHikariCP
minimum-idle: 20
maximum-pool-size: 50
connection-timeout: 30000
idle-timeout: 600000
max-lifetime: 1800000
auto-commit: true
leak-detection-threshold: 60000
pool-name 被设置为 HighConcurrencyHikariCP,可以方便我们在日志记录中进行区分。

什么是数据库连接池?
说完 HikariCP 的默认配置,我们再来说说什么是数据库连接池(Database Connection Pooling)。
数据库连接池和我们常用的线程池一样,都属于池化技术,它在程序初始化时创建一定数量的数据库连接对象并将其保存在一块内存当中。
它允许应用程序重复使用一个现有的数据库连接,当需要执行 SQL 时,直接从连接池中获取一个连接,而不是重新建立一个数据库连接,当 SQL 执行完,也并不是将数据库连接直接丢掉,而是将其归还到数据库连接池中。
数据库连接池示意图如下所示:

数据库连接池的主要目的是提高性能和资源利用率。创建和关闭数据库连接会产生额外的开销,尤其是在高并发的场景下。通过使用连接池,应用程序可以复用已经创建好的连接,减少了创建新连接所需的时间和资源。此外,连接池还可以根据需求自动调整连接数量,以适应不同的负载情况。
为什么 Spring Boot 会选择 HikariCP?
HikariCP 团队为了证明自己性...
未能定位到原文的划线
企业级Agent工作流编排项目PaiFlow
Vibe Coding版本的PaiAgent
派聪明RAG AI知识库Java版本+Go版本
微服务 PmHub、技术派、MYDB
求职派JobClaw(OpenClaw/Hermes架构
PaiCLI(类似Claude Code的Agent
派简历(代码已完成)
等实战项目。
1. 微信扫右侧的优惠券加入知识星球
2. 解锁星球的实战项目教程和源码: 项目源码+教程获取
真诚点赞 诚不我欺
回复