SpringBoot数据库连接池HikariCP,Druid,Tomcat JDBC,DBCP2,c3p0配置使用

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 遗留项目
新项目推荐 ✅ 首选 ✅ 需监控必选 ⭕ 备选 ❌ 不推荐 ❌ 不推荐

一句话选型

  1. 普通微服务、高并发 → 直接用 HikariCP(默认不用改)
  2. 要 SQL 监控、慢查询、安全防注入 → 用 Druid
  3. 传统单体、Tomcat 部署Tomcat JDBC
  4. 只维护老项目 → 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();
    }
}

四、生产最佳配置通用原则

  1. 最大连接数:MySQL 常规 10~30 足够,不要盲目开大
  2. 一律开启 test-while-idle + 心跳 SELECT 1 防断线
  3. 新项目只选 HikariCP 或 Druid,其余只做老项目维护
  4. 微服务无特殊监控需求,直接用 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

八、切换口诀

  1. type 全类名
  2. 改下层配置节点 hikari/druid/tomcat/dbcp2/c3p0。
  3. 参数按上面对照表同数值平移即可,不用改业务逻辑。
相关推荐
学术阿凡提2 小时前
Spring Boot 集成 Fastjson2 完整教程:从入门到避坑
spring boot·安全·json
小菜同学爱学习2 小时前
第一章 初识达梦数据库:基础认知与环境准备
数据库·达梦
zhoutongsheng2 小时前
如何解决ORA-01078参数文件错误_pfile与spfile互相创建恢复
jvm·数据库·python
m0_716255002 小时前
批处理一道例题+答案解析+批处理知识点总结 | 批处理高频易错场景 + 正确写法对照表
数据库·oracle
冷小鱼2 小时前
MyBatis 与 MyBatis-Plus:从入门到精通的完整指南
java·tomcat·mybatis
2401_824222692 小时前
HTML怎么标注字数限制提示_HTML实时字数统计占位【详解】
jvm·数据库·python
稀饭过霍2 小时前
数据类型【TINYINT、SMALLINT、INT、BIGINT、decimal(18,2)】表示意思
数据库
俺不要写代码2 小时前
数据库:DML
数据库·oracle
这个DBA有点耶2 小时前
两张百万级大表JOIN跑崩了?试试这3招
数据库·代码规范