数据库连接池--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> 

 

 

 

  

你可能感兴趣的:(数据库连接池)