c3p0 是經典的 JDBC 連接池庫,提供了靈活的配置方式。本文以 MySQL 為例,詳細演示代碼硬編碼、XML 配置文件、Properties 文件三種初始化 ComboPooledDataSource 的方法,並說明與 DbUtils 等工具類的配合使用。
import com.mchange.v2.c3p0.ComboPooledDataSource;
ComboPooledDataSource ds = new ComboPooledDataSource();
ds.setDriverClass("com.mysql.jdbc.Driver");
ds.setJdbcUrl("jdbc:mysql://localhost:3306/mydb");
ds.setUser("root");
ds.setPassword("asd");
獲取連接兩種模式:
QueryRunner qr = new QueryRunner(ds);
Connection conn = ds.getConnection();
QueryRunner qr = new QueryRunner();
User user = qr.query(conn, sql, new BeanHandler<User>(User.class));
文件名固定為 c3p0-config.xml,放在 classpath(src 目錄)下。
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<default-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/yourdb</property>
<property name="user">root</property>
<property name="password">asd</property>
</default-config>
<named-config name="mysql">
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/yourdb</property>
<property name="user">root</property>
<property name="password">asd</property>
</named-config>
<named-config name="oracle">
<!-- Oracle 配置 -->
</named-config>
</c3p0-config>
初始化:
new ComboPooledDataSource()new ComboPooledDataSource("mysql")文件名固定為 c3p0.properties,同樣放在 classpath 下。
c3p0.driverClass=com.mysql.jdbc.Driver
c3p0.jdbcUrl=jdbc:mysql://localhost:3306/yourdb
c3p0.user=root
c3p0.password=asd
初始化:new ComboPooledDataSource() 會自動讀取。
| 方式 | 優點 | 缺點 | 適用場景 |
|---|---|---|---|
| 代碼硬編碼 | 直觀、調試方便、動態決定參數 | 修改需重編譯、敏感信息易洩露 | 快速原型、測試、參數動態計算 |
| XML 配置 | 支持多環境命名配置、結構清晰、標準化 | XML 冗長、需放在 classpath | 企業級應用、多數據源切換 |
| Properties 文件 | 簡潔、易於運維修改、與 Spring 搭配佳 | 類型轉換靠約定、無命名空間隔離 | 生產環境標準部署、容器化配置注入 |
c3p0.initialPoolSize=5
c3p0.minPoolSize=5
c3p0.maxPoolSize=20
c3p0.maxIdleTime=1800
c3p0.acquireIncrement=5
c3p0.testConnectionOnCheckout=true
c3p0.preferredTestQuery=SELECT 1
更多屬性請參考官方文檔。生產環境建議啟用 testConnectionOnCheckout 或定時 idleConnectionTestPeriod 防止連接失效。