当前位置: 首页 > news >正文

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 配置。

一、五大连接池核心对比表

对比项HikariCPDruidTomcat JDBCDBCP2C3P0
归属官方默认阿里开源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 + 数据库驱动

<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
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 阿里连接池(带监控)

依赖
<!-- 排除默认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
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 连接池

依赖
<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

依赖
<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
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

依赖
<dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>0.9.5.5</version> </dependency>
application.yml + 配置类
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

必须加配置类

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统一核心参数,一键对照、直接复制切换配置

一、核心参数映射总表

表格

通用含义HikariCPDruidTomcat JDBCDBCP2C3P0
初始化连接数无自动配置 (随最小空闲)initial-sizeinitial-sizeinitial-sizeinitialPoolSize
最小空闲连接minimum-idlemin-idlemin-idlemin-idleminPoolSize
最大连接数maximum-pool-sizemax-activemax-activemax-totalmaxPoolSize
获取连接超时 (ms)connection-timeoutmax-waitmax-waitmax-wait-millischeckoutTimeout
空闲连接超时idle-timeoutmin-evictable-idle-time-millis无单独配置min-evictable-idle-time-millismaxIdleTime
连接最大生命周期max-lifetimemax-lifetimemax-agemax-lifetimemaxConnectionAge
空闲连接检测间隔内置自动time-between-eviction-runs-millisvalidation-intervaltime-between-eviction-runs-millisidleConnectionTestPeriod
连接心跳检测 SQLconnection-test-queryvalidation-queryvalidation-queryvalidation-querypreferredTestQuery
空闲时检测连接内置test-while-idletest-while-idletest-while-idle默认开启
借出时检测连接内置关闭test-on-borrowtest-on-borrowtest-on-borrow可配置

六、统一推荐参数值(所有池通用标准)

  • 初始连接:5
  • 最小空闲:5
  • 最大连接:20
  • 获取连接超时:30000 ms
  • 空闲超时:300000 ms
  • 连接生命周期:1800000 ms
  • 检测间隔:60000 ms
  • 心跳 SQL:SELECT 1

七、逐个 yml 配置模板(可直接切换)

1. HikariCP 模板

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 模板

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 模板

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 模板

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 模板

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. 参数按上面对照表同数值平移即可,不用改业务逻辑。
http://www.jsqmd.com/news/721078/

相关文章:

  • 技术奇点监狱
  • GModPatchTool终极教程:3步彻底修复Garry‘s Mod浏览器异常问题
  • 告别IIS!用Spotfire 7.8+新架构搭建BI平台:Node Manager实战详解
  • 绍兴GEO优化本地公司推荐 - 花开富贵112
  • 为什么92%的PHP表单项目在麒麟V10+达梦V8上首次部署失败?国产化引擎选型避坑指南
  • QLVideo:让macOS Finder告别视频预览空白,3分钟解锁全能视频管理
  • 突破跨域壁垒:Parse Server CORS配置完全指南
  • 5分钟从零到专业:PPTAgent终极AI演示文稿生成指南
  • 钰泰ETA4774E26, 32V带散热片的SOT封装单节锂电池线性充电芯片 。
  • SDMatte多分辨率适配教程:手机截图/相机原图/扫描件不同输入处理
  • vLLM-v0.17.1保姆级教程:vLLM + Airflow构建定时批量推理工作流
  • Realtek RTL8821CE无线网卡驱动深度解析:Linux内核兼容性问题的系统级解决方案
  • 用ESP32和阿里云MQTT做个远程温湿度监控:硬件接线、代码调试到手机查看数据全流程
  • 天机学堂AI助手
  • 你的DAC正弦波有毛刺?STM32F103实战避坑:DMA传输对齐、数据范围与定时器配置详解
  • Solon AI Harness:高性能智能体框架,多方面打磨实战,更新丰富且有应用示例
  • gte-base-zh开源Embedding部署:适配国产昇腾/海光CPU平台的兼容性方案
  • Windows 10/11下Tensorboard报‘无法识别‘?手把手教你配置PowerShell环境变量(附PyTorch虚拟环境创建)
  • 别再被ORA-12514搞懵了!手把手教你排查Oracle监听服务名问题(附tnsnames.ora配置详解)
  • 图片版权保护:芋田图像工具箱水印功能深度解析
  • 告别重复劳动:KeymouseGo让你的电脑学会自己工作
  • LED背光技术升级:工业显示效能革命
  • 抽象层的本质——控制复杂度的唯一路径
  • 题解:P1022 [NOIP2000 普及组] 计算器的改良
  • DamaiHelper:终极多平台自动化抢票助手完整指南
  • Azkaban 3.51.0 避坑指南:条件工作流和参数传递的那些‘坑’与最佳实践
  • semi-utils完整指南:批量添加相机水印的终极解决方案
  • 终极Android系统清理指南:无需root权限深度优化你的设备
  • 钰泰ETA6096,32V 输入隔离电压,2.5A 开关模式电池充电器。
  • Qwen3-4B-Instruct一文详解:bfloat16精度优势与推理延迟实测数据