数据库连接池--C3P0实现

1.C3P0 简介

  C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。

  C3P0的数据库连接池的核心类是ComboPooledDataSource

  使用C3P0需要在工程中导入的jar包

    c3p0-0.9.2-pre5\lib下有三个jar包,如果使用MySQL数据库,只需导入c3p0-0.9.2-pre5.jar,mchange-commons-java-0.2.3两个包即可,另外一个c3p0-oracle-thin-extras-0.9.2-pre5.jar供Oracle数据库使用.

2.代码实现

  方式一,与DBCP代码实现类似,使用ComboPooledDataSource自身的API实现对数据库连接池的属性进行配置.

import java.sql.*;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class C3P0Utils {
	//1 准备一个连接池
	private static ComboPooledDataSource dataSource = new ComboPooledDataSource();
	static{
		//设置参数
		try {
			//1.1 数据库连接基本4项
			dataSource.setDriverClass("com.mysql.jdbc.Driver");
			dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/day17");
			dataSource.setUser("root");
			dataSource.setPassword("fujianyi");
			//1.2 连接池的特性
			// * 初始化个数
			dataSource.setInitialPoolSize(10);
			// * 最大数
			dataSource.setMaxPoolSize(20);
			// * 最小数
			dataSource.setMinPoolSize(5);
			// * 每次增加量
			dataSource.setAcquireIncrement(3);	
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}	
	public static Connection getConnection() throws SQLException{
		return dataSource.getConnection();
	}
}

   方式二,使用C3P0的配置文件c3p0-config.xml,对数据库连接池进行设置,在创建ComboPooledDataSource对象时,将配置文件中<named-config name="XXX">name属性的值作为字符串参数传入,即可完成配置文件的自动加载,配置文件同样需要放在classpath路径下,即src路径.

import java.sql.Connection;
import java.sql.SQLException;
import com.mchange.v2.c3p0.ComboPooledDataSource;

public class C3P0Utils2 {
	private static ComboPooledDataSource dataSource;
	static{
		dataSource = new ComboPooledDataSource("XXX");
	}
	public static Connection getConnection() throws SQLException{
		return dataSource.getConnection();
	}
}

   关于配置文件

    首先配置文件的名必须为c3p0-config.xml,且必须放在classpath路径下,其格式及内容如下,

<c3p0-config>
	<!-- 默认配置,如果没有指定则使用这个配置 -->
	<default-config>
		<property name="checkoutTimeout">30000</property>
		<property name="idleConnectionTestPeriod">30</property>
		<property name="initialPoolSize">10</property>
		<property name="maxIdleTime">30</property>
		<property name="maxPoolSize">100</property>
		<property name="minPoolSize">10</property>
		<property name="maxStatements">200</property>
		<user-overrides user="test-user">
			<property name="maxPoolSize">10</property>
			<property name="minPoolSize">1</property>
			<property name="maxStatements">0</property>
		</user-overrides>
	</default-config> 
	<!-- 命名的配置 -->
	<named-config name="XXX">
		<property name="driverClass">com.mysql.jdbc.Driver</property>
		<property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/day17</property>
		<property name="user">root</property>
		<property name="password">fujianyi</property>
    <!-- 如果池中数据连接不够时一次增长多少个 -->
		<property name="acquireIncrement">5</property>
		<property name="initialPoolSize">20</property>
		<property name="minPoolSize">10</property>
		<property name="maxPoolSize">40</property>
		<property name="maxStatements">0</property>
		<property name="maxStatementsPerConnection">5</property>
	</named-config>
</c3p0-config> 

 

 

 

  

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。