🎉 恭喜你发现了宝藏!

Java 数据库连接池

温馨提示:本文最后更新于2025-12-26 18:12:16,某些文章具有时效性,若有错误或已失效,请在下方留言或联系社长
本文用通俗的语言讲清数据库连接池的核心知识,包括“是什么、为什么用、选哪个、怎么配”,适合新手快速上手,也能作为项目配置的参考手册。

一、先搞懂:数据库连接池是什么?

简单说,数据库连接池就是一个“连接仓库”——提前创建好一批和数据库的连接,应用程序需要访问数据库时,直接从仓库里拿现成的连接,用完后再还回去,不用每次都重新创建和销毁连接。
举个例子:就像去餐厅吃饭,连接池相当于“提前备好的餐桌”,你到了直接坐(拿连接),吃完走了餐桌留给别人用(还连接);如果没有连接池,就像每次来都要先搭桌子、吃完再拆桌子,又麻烦又费时间。

1.1 为什么必须用连接池?

  • 快:不用重复创建连接,访问数据库的响应速度会大幅提升;
  • 稳:能限制最大并发连接数,避免太多请求同时连数据库导致数据库崩溃;
  • 省事儿:自动处理“空闲连接回收”“失效连接重连”,不用手动维护。

二、选哪个?4种主流连接池对比

Java 里常用的连接池有4种,按“推荐优先级”排序,根据自己的项目场景选:
连接池类型
优点
适合什么项目
HikariCP
速度最快、配置最简单,Spring Boot 2.x 以上默认自带
Spring Boot 项目、高并发微服务(优先选)
Druid
有可视化监控页面,能防SQL注入,企业级功能全
需要监控、审计的企业级应用
Tomcat JDBC Pool
和 Tomcat 服务器深度整合,不用额外加依赖
传统 Java Web 项目(WAR包部署到 Tomcat)
C3P0
兼容性极强,老项目都能用
老项目维护(新项目不推荐)
一句话总结:新项目优先用 HikariCP;需要监控用 Druid;Tomcat 部署用 Tomcat JDBC Pool;老项目别动 C3P0。

三、怎么配?4种连接池配置步骤(直接抄)

所有配置都以“连接 MySQL 数据库”为例,把里面的 urlusernamepassword 改成自己的数据库信息即可。

3.1 HikariCP 配置(Spring Boot 默认,推荐)

不用额外加依赖,直接在 application.yml 里写配置:
spring:
  datasource:
    # 你的数据库信息
    url: jdbc:mysql://127.0.0.1:3306/你的数据库名?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
    username: 你的数据库用户名(如root)
    password: 你的数据库密码(如123456)
    driver-class-name: com.mysql.cj.jdbc.Driver
    # HikariCP 核心配置(直接抄,不用改)
    hikari:
      maximum-pool-size: 20        # 最大连接数(8核CPU够用)
      minimum-idle: 20             # 最小空闲连接数(和最大连接数一致,响应快)
      idle-timeout: 600000         # 空闲10分钟的连接回收
      connection-timeout: 30000    # 拿连接最多等30秒,超时提示系统忙
      max-lifetime: 1800000        # 连接用30分钟就换新的,避免失效

3.2 Druid 配置(需要监控选这个)

分两步:先加依赖,再写配置

第一步:加 Maven 依赖(复制到 pom.xml)

<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>druid-spring-boot-starter</artifactId>
  <version>1.2.16</version>
</dependency>

第二步:写配置(application.yml)

spring:
  datasource:
    # 你的数据库信息
    url: jdbc:mysql://127.0.0.1:3306/你的数据库名?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
    username: 你的数据库用户名
    password: 你的数据库密码
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource  # 指定用Druid
    # Druid 核心配置
    druid:
      initial-size: 5              # 启动时创建5个连接
      max-active: 20               # 最大连接数20
      min-idle: 5                  # 空闲时保留5个连接
      max-wait: 60000              # 拿连接最多等60秒
      # 监控配置(关键!配置完能看监控页面)
      stat-view-servlet:
        enabled: true
        url-pattern: /druid/*      # 监控页面地址:http://localhost:8080/druid
        login-username: admin      # 监控页面登录用户名
        login-password: 123456     # 监控页面登录密码
配置完启动项目,访问 http://localhost:8080/druid,输入用户名密码就能看到监控数据。

3.3 Tomcat JDBC Pool 配置(部署到 Tomcat 用)

不用加依赖,直接在 Tomcat 的 context.xml 里写配置(context.xml 位置:Tomcat/conf/ 或 项目/META-INF/)
<?xml version="1.0" encoding="UTF-8"?>
<Context>
  <Resource 
    name="jdbc/TestDB"                # 自定义名称,后面用这个名拿连接
    auth="Container"
    type="javax.sql.DataSource"
    driverClassName="com.mysql.cj.jdbc.Driver"
    url="jdbc:mysql://127.0.0.1:3306/你的数据库名?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai"
    username="你的数据库用户名"
    password="你的数据库密码"
    maxTotal="20"                     # 最大连接数20
    maxIdle="5"                       # 最大空闲连接数5
    minIdle="2"                       # 最小空闲连接数2
    maxWaitMillis="30000"             # 拿连接最多等30秒
  />
</Context>
项目中拿连接的代码:
// 通过上面配置的 "jdbc/TestDB" 名称获取连接
Context context = new InitialContext();
DataSource dataSource = (DataSource) context.lookup("java:comp/env/jdbc/TestDB");
Connection connection = dataSource.getConnection();

3.4 C3P0 配置(老项目维护用)

第一步:加 Maven 依赖

<dependency>
  <groupId>com.mchange</groupId>
  <artifactId>c3p0</artifactId>
  <version>0.9.5.5</version>
</dependency>

第二步:写配置(src/main/resources/c3p0-config.xml)

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
  <default-config>
    <property name="driverClass">com.mysql.cj.jdbc.Driver</property>
    <property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/你的数据库名?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai</property>
    <property name="user">你的数据库用户名</property>
    <property name="password">你的数据库密码</property>
    <property name="maxPoolSize">20</property>      # 最大连接数20
    <property name="minPoolSize">5</property>       # 最小空闲连接数5
    <property name="maxIdleTime">600</property>     # 空闲10分钟回收连接
  </default-config>
</c3p0-config>
项目中拿连接的代码:
// 直接创建数据源,自动加载上面的配置
ComboPooledDataSource dataSource = new ComboPooledDataSource();
Connection connection = dataSource.getConnection();

四、新手避坑:3个关键注意事项

  • 数据库信息别写错:url 里的 “数据库名”、端口号(默认3306),还有用户名密码,错一个就连接失败;
  • 驱动类名区分版本:MySQL 8.x 用 com.mysql.cj.jdbc.Driver,MySQL 5.x 用 com.mysql.jdbc.Driver
  • 别忘关连接:用完连接一定要在 finally 块里关闭(用 MyBatis、JPA 框架会自动关,手动写代码要注意)。

五、总结

1. 新项目优先用 HikariCP,配置简单、速度快;2. 需要监控用 Druid,能看数据还能防注入;3. 传统 Tomcat 项目用 Tomcat JDBC Pool;4. 老项目别动 C3P0;5. 配置时改好自己的数据库信息,别踩驱动类名和连接关闭的坑。
此文章仅供学习 请在下载24小时内删除。
© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享
评论 抢沙发

    也~一个评论的都没有