java中使用c3p0连接池需三步:引入依赖(c3p0与mchange-commons-java)、配置c3p0-config.xml(必须置于src根目录)、通过combopooleddatasource获取连接;支持纯jdbc,适合中小型或老系统。

Java 中使用 C3P0 连接池,核心是三步:引入依赖、配置连接参数、通过 ComboPooledDataSource 获取连接。它不依赖 Spring 或 Hibernate,纯 JDBC 场景下也能直接集成,适合中小型项目或需稳定性的老系统。
所需依赖文件
C3P0 自 0.9.2 版本起将基础工具类拆分到独立包,必须同时引入以下两个 JAR:
- c3p0-0.9.5.5.jar(主连接池实现)
- mchange-commons-java-0.2.12.jar(配置解析、线程辅助等底层支持)
若用 Maven,可直接添加:
<dependency><groupid>com.mchange</groupid><artifactid>c3p0</artifactid><version>0.9.5.5</version></dependency>
Maven 会自动拉取 mchange-commons-java 作为传递依赖,无需手动添加。
c3p0-config.xml 配置文件
该文件必须放在 src 根目录下,文件名不能改,C3P0 默认只识别这个名字。内容示例如下:
<?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://localhost:3306/testdb?useSSL=false&serverTimezone=UTC</property><property name="user">root</property><property name="password">123456</property><pre class="brush:java;toolbar:false;"><!-- 连接池基础参数 --> <property name="initialPoolSize">5</property> <property name="minPoolSize">3</property> <property name="maxPoolSize">20</property> <property name="acquireIncrement">2</property> <!-- 连接有效性检查 --> <property name="preferredTestQuery">SELECT 1</property> <property name="testConnectionOnCheckin">true</property> <property name="idleConnectionTestPeriod">30</property> <!-- 超时与重试 --> <property name="checkoutTimeout">3000</property> <property name="acquireRetryAttempts">3</property> <property name="acquireRetryDelay">1000</property>
注意:& 在 XML 中要写成 &;MySQL 8+ 驱动类名是 com.mysql.cj.jdbc.Driver,不是旧版的 com.mysql.jdbc.Driver。
Java 代码中获取连接
无需手动加载配置,C3P0 会自动扫描 classpath 下的 c3p0-config.xml:
import com.mchange.v2.c3p0.ComboPooledDataSource;
<p>public class DBUtil {
private static final ComboPooledDataSource ds = new ComboPooledDataSource();</p><pre class="brush:java;toolbar:false;">public static Connection getConnection() throws SQLException {
return ds.getConnection();
}}
每次调用 getConnection() 就从池中取出一个连接,用完后务必在 finally 块中 close() —— 这不会真正关闭连接,而是归还给池。
编程式配置(可选)
如果不想用 XML,也可以纯代码配置:
ComboPooledDataSource cpds = new ComboPooledDataSource();
cpds.setDriverClass("com.mysql.cj.jdbc.Driver");
cpds.setJdbcUrl("jdbc:mysql://localhost:3306/testdb");
cpds.setUser("root");
cpds.setPassword("123456");
cpds.setInitialPoolSize(5);
cpds.setMaxPoolSize(20);
cpds.setAcquireRetryAttempts(3);这种方式适合动态切换数据源或测试环境,但生产环境推荐 XML,便于运维调整而不改代码。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











