初始C3P0连接池

C3P0连接池只需要一个jar包:


其中我们可以看到有三个jar包;

属于C3P0的jar包只有一个,另外两个是测试时使用的JDBC驱动:一个是mysql的,一个是oracle的;

可以看到在src下我们有一个xml文件,在C3P0中我们可以通过xml配置参数,同样也可以像DBCP中使用properties文件,但是properties文件中只能写一个数据库连接,xml配置就更为灵活了,可以写多个连接(可选的)后面有案例。


普通连接:

package c3p0;

import java.sql.Connection;

import com.mchange.v2.c3p0.ComboPooledDataSource;

/**
 * 使用C3P0连接池
 * @author mzy
 * 
 * 每一个连接池可以配置的参数是很多的;
 * 但是我们举例使用的都是一些简单的配置,
 * 我们配置的越多,使用起来就越灵活!	
 */
public class Demo01 {
	private static String url="jdbc:mysql://localhost:3306/test";
	private static String user="root";
	private static String password="123456";
	private static String driverClass="com.mysql.jdbc.Driver";
	
	public static void main(String[] args) throws Exception {
		// 1) 创建连接池对象
		ComboPooledDataSource cds = new ComboPooledDataSource();
		
		// 2) 设置连接参数
		cds.setJdbcUrl(url);
		cds.setUser(user);
		cds.setPassword(password);
		cds.setDriverClass(driverClass);
		
		// 3) 设置连接池相关的参数
		cds.setInitialPoolSize(5); // 初始化连接数
		cds.setMaxPoolSize(10); // 最大连接数
		cds.setCheckoutTimeout(3000); // 最大等待时间
		cds.setMinPoolSize(3); // 设置最小连接数
		/*
		 * 最小连接数适用的场景;
		 * 在高峰期之后,连接池中的连接数从初始化的5个
		 * 变成了最大连接数的10个;
		 * 但是当低峰期到来的时候,根本使用不到那么多连接;
		 * 这个时候就需要最小连接数来控制最少的连接数了。
		 */
		// 4) 获取连接
		for(int i=1; i<=11; i++) {
			Connection conn = cds.getConnection();
			System.out.println(conn); // 代理的connection
			// 红色的是C3P0软件的日志信息!
			
			// 关闭第3个
			if(i == 3) {
				conn.close(); // 因为这些连接池
			}
		}
	}
}

使用加载配置文件(c3p0-config.xml:名字是固定的,不可更改)

c3p0-config.xml:中的内容

<c3p0-config>
	<!-- 默认配置 -->
  <default-config>
  		<!-- 连接参数 -->
    	<property name="jdbcUrl">jdbc:mysql://localhost:3306/test</property>
    	<property name="user">root</property>
    	<property name="password">123456</property>
    	<property name="driverClass">com.mysql.jdbc.Driver</property>
    	
    	<!-- 连接池参数 -->
    	<property name="initialPoolSize">5</property>
    	<property name="maxPoolSize">12</property>
    	<property name="checkoutTimeout">5000</property>
    	<property name="minPoolSize">3</property>

  </default-config>

	<!-- 命名配置 -->
  <named-config name="oracle">
   		 <!-- 连接参数 -->
    	<property name="jdbcUrl">jdbc:oracle:thin:@localhost:1521:xe</property>
    	<property name="user">mzy</property>
    	<property name="password">123456</property>
    	<property name="driverClass">oracle.jdbc.driver.OracleDriver</property>
    	
    	<!-- 连接池参数 -->
    	<property name="initialPoolSize">5</property>
    	<property name="maxPoolSize">12</property>
    	<property name="checkoutTimeout">5000</property>
    	<property name="minPoolSize">3</property>
   </named-config>


</c3p0-config>

使用了配置文件之后,使用c3p0连接池,当你设置连接参数的时候,它会自动去配置文件中读取,不需要有额外操作!

使用读取配置文件的方式进行初始化连接池:

package c3p0;

import java.sql.Connection;
import java.sql.SQLException;

import com.mchange.v2.c3p0.ComboPooledDataSource;

/**
 * 同样适用配置文件的方式;
 * 不用硬编码
 * 
 * 这里也可以使用properties的形式;但是properties不如xml灵活!
 * 比如如果我们要有多个数据库可选(不同的数据库产品)
 * 使用properties的话,我们必须一个数据库一个properties;
 * 不够灵活,所以在C3P0中我们建议使用xml的方式!
 * 
 * @author mzy
 *
 */
public class Demo02 {
	/**
	 * 使用xml配置文件,需要注意:
	 * 		1) 需要把一个名为c3p0-config.xml文件放到src目录下,c3p0会自动读取。
	 * <c3p0的读取机制:
	 * 		1.在普通java项目下,是在bin目录下找
	 * 		2.在web项目下,是在WEB-INF/classes/下找
	 * 但是因为在普通java项目下,bin目录是原封不动的拷贝src中的(除.java文件编译成.class文件)
	 * 在web项目下,所有src中的文件也同上拷贝进WEB-INF/classes中
	 * 所以我们只用把 c3p0-config.xml直接拷贝到src下就可以了!
	 * >
	 * @throws SQLException 
	 */
	public static void main(String[] args) throws SQLException {
		/**
		 * 1) new ComboPooledDataSource():
		 * 		使用这种没有参数的构造方法,读取的是default-config的配置信息。
		 * 
		 * 2) new ComboPooledDataSource("name"):
		 * 		使用有参的构造方法,读取的是name-config配置信息。
		 */
		// 1) 创建连接池对象
		// ComboPooledDataSource cds = new ComboPooledDataSource();
		ComboPooledDataSource cds = new ComboPooledDataSource("oracle");
		
		//2) 获取连接
		for(int i=1;i<=13;i++){
			Connection conn = cds.getConnection();
			System.out.println(conn);
			
			//关闭第3个
			if(i==3){
				conn.close();//本质是把连接对象放回连接池中
			}
		}
		
	}
}

猜你喜欢

转载自blog.csdn.net/qq_36791569/article/details/80271393
今日推荐