一、导包
https://sourceforge.net/projects/c3p0/files/latest/download?source=files下载最新C3PO的二进制包。
二、配置文件
在工程的src下新建一个名为c3p0-config.xml且内容为:
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<default-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql:///数据库名</property>
<property name="user">root</property>
<property name="password">123</property>
<property name="initialPoolSize">5</property>
<property name="maxPoolSize">20</property>
</default-config>
<named-config name="c3p0">
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql:///数据库名</property>
<property name="user">root</property>
<property name="password">123</property>
</named-config>
</c3p0-config>
常见配置项
分类 | 属性 | 描述 |
---|---|---|
必须项 | user | 用户名 |
password | 密码 | |
driverClass | 驱动 mysql驱动,com.mysql.jdbc.Driver | |
jdbcUrl | 路径 mysql路径,jdbc:mysql://localhost:3306/数据库 | |
基本配置 | acquireIncrement | 连接池无空闲连接可用时,一次性创建的新连接数 默认值:3 |
initialPoolSize | 连接池初始化时创建的连接数 默认值:3 | |
maxPoolSize | 连接池中拥有的最大连接数 默认值:15 | |
minPoolSize | 连接池保持的最小连接数 | |
maxIdelTime | 连接的最大空闲时间。如果超过这个时间,某个数据库连接还没有被使用,则会断开掉这个连接,如果为0,则永远不会断开连接。 默认值:0 | |
管理连接池的大小和连接的生存时间 | maxConnectionAge | 配置连接的生存时间,超过这个时间的连接将由连接池自动断开丢弃掉。当然正在使用的连接不会马上断开,而是等待它close再断开。配置为0的时候则不会对连接的生存时间进行限制。 默认值:0 |
maxIdleTimeExcessConnections | 这个配置主要是为了减轻连接池的负载,配置不为0,则会将连接池中的连接数量保持到minPoolSize,为0则不处理 | |
配置PreparedStatement缓存 | maxStatements | 连接池为数据源缓存的PreparedStatement的总数。由于PreparedStatement属于单个Connnection,所以这个数量应该根据应用中平均连接数乘以每个连接的平均PreparedStatement来计算。为0的时候不缓存,同时maxStatementsPerConnection的配置无效。 |
maxStatementsPreConnection | 连接池为数据源单个Connection缓存的PreparedStatement数,这个配置比maxStatements更有意义,因为它缓存的服务对象是单个数据连接,如果设置的好,肯定是可以提高性能的。为0的时候不缓存。 |
三、编写工具类
public class JdbcUtils {
private static ComboPooledDataSource dataSource = new ComboPooledDataSource();
public static DataSource getDataSource() {
return dataSource;
}
public static Connection getConnection() {
try {
return dataSource.getConnection();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
public static void release(ResultSet rs, PreparedStatement pstmt, Connection conn){
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
rs = null;
}
if(pstmt!=null){
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
pstmt= null;
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
conn = null;
}
}
}