SpringBoot数据库连接池HikariCP,Druid,Tomcat JDBC,DBCP2,c3p0配置使用
Spring Boot 五大数据库连接池完整对比 + 依赖 + yml 配置
涵盖:HikariCP、Druid、Tomcat JDBC、DBCP2、C3P0先对比选型,再给每套可直接复制的 Maven 依赖 + yml 配置。
一、五大连接池核心对比表
| 对比项 | HikariCP | Druid | Tomcat JDBC | DBCP2 | C3P0 |
|---|---|---|---|---|---|
| 归属 | 官方默认 | 阿里开源 | Tomcat 原生 | Apache | 老牌开源 |
| SpringBoot 默认 | 2.x/3.x 默认 | 非默认 | 1.x 默认 | 不默认 | 不默认 |
| 性能 | 🔥 最优 | 次优 | 中等 | 较差 | 较差 |
| 轻量化 | 极轻 | 较重 | 轻 | 中等 | 重 |
| 监控能力 | 基础 JMX / 微服务监控 | 自带 Web 监控、SQL 审计、慢查询、防火墙 | 无 | 弱 | 弱 |
| 功能特性 | 极简、高并发无锁 | 监控 + 安全 + 加密 + 多数据源 | 简单稳定 | 基础池功能 | 自动重连、事务回收 |
| 维护状态 | 持续更新 | 持续更新 | 随 Tomcat 更新 | 持续维护 | 基本停滞 |
| 适用场景 | 微服务、高并发、通用新项目 | 金融 / 电商 / 需要 SQL 监控、安全审计 | 传统项目、内嵌 Tomcat 环境 | 老项目兼容 | 老旧 SSM/SSH 遗留项目 |
| 新项目推荐 | ✅ 首选 | ✅ 需监控必选 | ⭕ 备选 | ❌ 不推荐 | ❌ 不推荐 |
一句话选型
- 普通微服务、高并发 → 直接用 HikariCP(默认不用改)
- 要 SQL 监控、慢查询、安全防注入 → 用 Druid
- 传统单体、Tomcat 部署 → Tomcat JDBC
- 只维护老项目 → DBCP2 / C3P0,新项目别用
二、通用前置依赖
所有连接池都需要基础 starter + 数据库驱动
XML
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!-- MySQL 驱动 -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
三、逐个配置(依赖 + yml 直接复制可用)
1、HikariCP(SpringBoot 默认,推荐)
无需额外依赖,starter 自带
application.yml
bash
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/test?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
username: root
password: 123456
type: com.zaxxer.hikari.HikariDataSource
hikari:
maximum-pool-size: 20
minimum-idle: 10
connection-timeout: 30000
idle-timeout: 600000
max-lifetime: 1800000
leak-detection-threshold: 60000
2、Druid 阿里连接池(带监控)
依赖
XML
<!-- 排除默认Hikari -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
<exclusions>
<exclusion>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- Druid SpringBoot3 专用starter -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-3-starter</artifactId>
<version>1.2.20</version>
</dependency>
application.yml
html
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/test?useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: 123456
type: com.alibaba.druid.pool.DruidDataSource
druid:
initial-size: 5
min-idle: 5
max-active: 20
max-wait: 60000
time-between-eviction-runs-millis: 60000
min-evictable-idle-time-millis: 300000
validation-query: SELECT 1
test-while-idle: true
test-on-borrow: false
test-on-return: false
filters: stat,wall,log4j2
# 监控页面配置 访问 /druid
stat-view-servlet:
enabled: true
login-username: admin
login-password: admin123
allow: 127.0.0.1
访问地址:http://localhost:8080/druid
3、Tomcat JDBC 连接池
依赖
XML
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
<exclusions>
<exclusion>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jdbc</artifactId>
</dependency>
application.ym
4、Apache DBCP2
依赖
XML
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
<exclusions>
<exclusion>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
</dependency>
application.yml
XML
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/test?useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: 123456
type: org.apache.commons.dbcp2.BasicDataSource
dbcp2:
initial-size: 5
min-idle: 5
max-total: 20
max-wait-millis: 30000
test-while-idle: true
validation-query: SELECT 1
5、C3P0
依赖
XML
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.5</version>
</dependency>
application.yml + 配置类
XML
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/test?useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: 123456
type: com.mchange.v2.c3p0.ComboPooledDataSource
必须加配置类
java
import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import javax.sql.DataSource;
@Configuration
public class C3p0Config {
@Bean
@Primary
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource dataSource(){
return new ComboPooledDataSource();
}
}
四、生产最佳配置通用原则
- 最大连接数:MySQL 常规 10~30 足够,不要盲目开大
- 一律开启
test-while-idle+ 心跳SELECT 1防断线 - 新项目只选 HikariCP 或 Druid,其余只做老项目维护
- 微服务无特殊监控需求,直接用 SpringBoot 默认 HikariCP 即可,零配置开箱即用
五、数据库连接池参数一一对应对照表
HikariCP / Druid / Tomcat JDBC / DBCP2 / C3P0统一核心参数,一键对照、直接复制切换配置
一、核心参数映射总表
表格
| 通用含义 | HikariCP | Druid | Tomcat JDBC | DBCP2 | C3P0 |
|---|---|---|---|---|---|
| 初始化连接数 | 无自动配置 (随最小空闲) | initial-size | initial-size | initial-size | initialPoolSize |
| 最小空闲连接 | minimum-idle | min-idle | min-idle | min-idle | minPoolSize |
| 最大连接数 | maximum-pool-size | max-active | max-active | max-total | maxPoolSize |
| 获取连接超时 (ms) | connection-timeout | max-wait | max-wait | max-wait-millis | checkoutTimeout |
| 空闲连接超时 | idle-timeout | min-evictable-idle-time-millis | 无单独配置 | min-evictable-idle-time-millis | maxIdleTime |
| 连接最大生命周期 | max-lifetime | max-lifetime | max-age | max-lifetime | maxConnectionAge |
| 空闲连接检测间隔 | 内置自动 | time-between-eviction-runs-millis | validation-interval | time-between-eviction-runs-millis | idleConnectionTestPeriod |
| 连接心跳检测 SQL | connection-test-query | validation-query | validation-query | validation-query | preferredTestQuery |
| 空闲时检测连接 | 内置 | test-while-idle | test-while-idle | test-while-idle | 默认开启 |
| 借出时检测连接 | 内置关闭 | test-on-borrow | test-on-borrow | test-on-borrow | 可配置 |
六、统一推荐参数值(所有池通用标准)
- 初始连接:5
- 最小空闲:5
- 最大连接:20
- 获取连接超时:30000 ms
- 空闲超时:300000 ms
- 连接生命周期:1800000 ms
- 检测间隔:60000 ms
- 心跳 SQL:
SELECT 1
七、逐个 yml 配置模板(可直接切换)
1. HikariCP 模板
XML
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/你的数据库名?
useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
username: root
password: 你的密码
type: com.zaxxer.hikari.HikariDataSource
# HikariCP 核心配置
hikari:
# 连接池名称
pool-name: HikariCP-Pool
# 最大连接数(核心,根据业务调整,建议10~30)
maximum-pool-size: 20
# 最小空闲连接(建议和最大一致,减少波动)
minimum-idle: 20
# 从连接池获取连接的最大等待时间(毫秒)
connection-timeout: 30000
# 连接空闲超时时间(毫秒,默认10分钟)
idle-timeout: 600000
# 连接最大生命周期(毫秒,不要超过数据库wait_timeout)
max-lifetime: 1800000
# 连接泄漏检测阈值(毫秒,超时未归还则报警)
leak-detection-threshold: 60000
# 自动提交
auto-commit: true
# 心跳检测SQL,验证连接是否有效
connection-test-query: SELECT 1
2. Druid 模板
XML
spring:
datasource:
# 1. 基础数据库配置
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/你的数据库名?
useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
username: root
password: 你的密码
type: com.alibaba.druid.pool.DruidDataSource
# 2. Druid 连接池核心配置
druid:
initial-size: 5 # 初始化连接数
min-idle: 5 # 最小空闲连接
max-active: 20 # 最大连接数
max-wait: 60000 # 获取连接等待超时
time-between-eviction-runs-millis: 60000 # 空闲检测间隔
min-evictable-idle-time-millis: 300000 # 连接最小存活时间
max-lifetime: 1800000
validation-query: SELECT 1 # 检测连接是否有效
test-while-idle: true
test-on-borrow: false
test-on-return: false
# 3. 开启监控、防火墙
filters: stat,wall,log4j2
# 4. Web 监控页面(重点!)
stat-view-servlet:
enabled: true
url-pattern: /druid/*
login-username: admin # 监控页面登录账号
login-password: admin # 监控页面登录密码
allow: 127.0.0.1 # 只允许本地访问
# 5. Web 访问统计
web-stat-filter:
enabled: true
url-pattern: /*
exclusions: "*.js,*.css,/druid/*"
3. Tomcat JDBC 模板
XML
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/test?useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: 123456
type: org.apache.tomcat.jdbc.pool.DataSource
tomcat:
initial-size: 5
min-idle: 5
max-active: 20
max-wait: 30000
validation-interval: 60000
validation-query: SELECT 1
test-while-idle: true
4. DBCP2 模板
XML
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/test?useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: 123456
type: org.apache.commons.dbcp2.BasicDataSource
dbcp2:
initial-size: 5
min-idle: 5
max-total: 20
max-wait-millis: 30000
min-evictable-idle-time-millis: 300000
time-between-eviction-runs-millis: 60000
validation-query: SELECT 1
test-while-idle: true
5. C3P0 模板
XML
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/test?useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: 123456
type: com.mchange.v2.c3p0.ComboPooledDataSource
# c3p0 额外参数
c3p0:
initialPoolSize: 5
minPoolSize: 5
maxPoolSize: 20
checkoutTimeout: 30000
maxIdleTime: 300000
maxConnectionAge: 1800000
idleConnectionTestPeriod: 60000
preferredTestQuery: SELECT 1
八、切换口诀
- 改
type全类名 - 改下层配置节点
hikari/druid/tomcat/dbcp2/c3p0。 - 参数按上面对照表同数值平移即可,不用改业务逻辑。