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. 参数按上面对照表同数值平移即可,不用改业务逻辑。
相关推荐
weelinking9 小时前
【产品】00_产品经理用Claude实现产品系列介绍
数据库·人工智能·sql·数据挖掘·github·产品经理
2301_803934619 小时前
Go语言如何做网络爬虫_Go语言爬虫开发教程【指南】
jvm·数据库·python
秋910 小时前
windows中安装redis
数据库·redis·缓存
Cosolar11 小时前
万字详解:RAG 向量索引算法与向量数据库架构及实战
数据库·人工智能·算法·数据库架构·milvus
想唱rap11 小时前
IO多路转接之poll
服务器·开发语言·数据库·c++
SeaTunnel11 小时前
AI 让 SeaTunnel 读源码和调试过时了吗?
大数据·数据库·人工智能·apache·seatunnel·数据同步
凯瑟琳.奥古斯特11 小时前
数据冗余与规范化的本质[数据库原理]
开发语言·数据库·职场和发展
_ku_ku_12 小时前
数据库系统原理 · SQL 数据定义、更新及数据库编程 · 自学总结
数据库·oracle
Mortalbreeze12 小时前
深度理解文件系统 ---- 从磁盘存储到内核存储
大数据·linux·数据库
2301_8039346112 小时前
MySQL 字段类型选择规范指南
jvm·数据库·python