最新消息:关注【已取消】微信公众号,可以获取全套资料,【全套Java基础27天】【JavaEE就业视频4个月】【Android就业视频4个月】

C3P0多数据源连接池的配置使用与C3P0Utils工具类自定义

Java基础 太平洋学习网 0浏览 评论

 C3P0为开源连接池,hibernate框架默认推荐使用c3po连接池,c3p0使用步骤如下,案例中配置将教会你c3p0多数据源的配置和使用。

1)导入c3p0的jar包

c3p0-0.9.1.2.jar 核心包

2)创建连接池对象ComboPooledDataSource对象

3)设置连接参数(url,user,password,dirverClass)

4)设置连接池参数(初始连接数,最大连接数,最大等待时间)

5)获取连接对象(getConnection() 方法)

方式一:不使用c3p0-config.xml配置文件,直接定义连接池,本人写了@Test测试方法,代码如下。

@Test
public void test1(){
  try {
	  //1.创建连接池对象
	  ComboPooledDataSource ds = new ComboPooledDataSource();
	  //2.设置连接参数
	  ds.setDriverClass("com.mysql.jdbc.Driver");
	  ds.setJdbcUrl("jdbc:mysql://localhost:3306/test");
	  ds.setUser("root");
	  ds.setPassword("root");
	  
	  //3.设置连接池参数
	  ds.setInitialPoolSize(5);// 初始化连接数
	  ds.setMaxPoolSize(8);//最大连接数
	  ds.setCheckoutTimeout(3000);//最大等待时间
	  
	  //4.获取连接
	  for(int i=1;i<=9;i++){
		 Connection conn = ds.getConnection();
		 System.out.println(conn);
		 if(i==5){
			/**
			 * 把连接对象放回连接池
			 */
			conn.close();
		 }
	  }
	  
  } catch (Exception e) {
	  e.printStackTrace();
  }
}

方式二:使用c3p0-config.xml配置文件来创建连接池,适合多数据源。

第一步:首先在项目src目录中新建c3p0-config.xml文件,系统默认会在src目录下寻找名为c3p0-config.xml配置文件,以下配置为c3p0多数据源的配置方式。

<?xml version="1.0" encoding="utf-8"?>
<c3p0-config>
  <!-- 默认配置 -->
  <!-- 属性规则:name值和方法名称相同 -->
  <default-config>
    <property name="jdbcUrl">jdbc:mysql://localhost:3306/test1?useUnicode=true&amp;characterEncoding=utf-8</property>
 	<property name="user">root</property>
 	<property name="password">1234</property>
 	<property name="driverClass">com.mysql.jdbc.Driver</property>
 	
 	<property name="initialPoolSize">5</property>
 	<property name="maxPoolSize">12</property>
 	<property name="checkoutTimeout">3000</property>	
  </default-config>

  <!-- 命名配置,如果有多个数据库,可以使用命名配置来区分 -->
  <named-config name="test2DB"> 
	<property name="jdbcUrl">jdbc:mysql://localhost:3306/test2?useUnicode=true&amp;characterEncoding=utf-8</property>
 	<property name="user">root</property>
 	<property name="password">1234</property>
 	<property name="driverClass">com.mysql.jdbc.Driver</property>
 	
 	<property name="initialPoolSize">5</property>
 	<property name="maxPoolSize">14</property>
 	<property name="checkoutTimeout">3000</property>	
  </named-config>
</c3p0-config>

第二步:分别使用默认配置和命名配置来创建不同的连接池。

/**
 * 使用配置文件方式读取参数信息
 * 注意: c3p0会默认查询类路径的c3p0-config.xml文件,文件名不能错!!
 */
@Test
public void test2(){
	try {
		//1.创建连接池对象(方式一: 使用默认配置(default-config))
		//ComboPooledDataSource ds = new ComboPooledDataSource();
		
		//2.创建连接池对象(方式二: 使用命名配置(named-config:test2DB))
		ComboPooledDataSource ds = new ComboPooledDataSource("test2DB");
		
		//2.获取连接
		for(int i=1;i<=9;i++){
			Connection conn = ds.getConnection();
			System.out.println(conn);
			if(i==5){
				/**
				 * 把连接对象放回连接池
				 */
				conn.close();
			}
		}
	} catch (SQLException e) {
		e.printStackTrace();
	}
}

C3P0多数据源连接池的配置使用讲完了,那么如何来自定义C3P0Utils工具类呢?定义方法如下。

package com.baidu.utils;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.sql.DataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource;

/**
 * C3P0版本的工具类
 * @author APPle
 *
 */
public class C3P0Util {
	
	//创建连接池对象
	//使用无参的构造方法---使用默认配置:default-config
	//规则:项目中连接一个数据库就使用一个连接池对象
	private static DataSource ds = new ComboPooledDataSource();
	
	//使用命名空间配置来创建连接池对象,可用来自由切换数据库连接
	//private static DataSource ds = new ComboPooledDataSource("test2DB");
	/**
	 * 提供给java程序获取连接的方法
	 */
	public static Connection getConnection(){
		try {
			Connection conn = ds.getConnection();
			return conn;
		} catch (SQLException e) {
			e.printStackTrace();
			throw new RuntimeException(e);
		}
	}
	
	/**
	 * 返回数据源对象
	 * @return
	 */
	public static DataSource getDataSource(){
		return ds;
	}
	
	public static void close(ResultSet rs,Statement stmt,Connection conn){
		try {
			if(rs!=null)rs.close();
			if(stmt!=null)stmt.close();
			if(conn!=null)conn.close(); //把连接返回连接池
		} catch (SQLException e) {
			e.printStackTrace();
			throw new RuntimeException(e);
		}
	}
}

C3P0多数据源的作用就是可以在javaweb项目中自由切换数据库连接,非常的方便。

来源网站:太平洋学习网,转载请注明出处:http://www.tpyyes.com/a/java/96.html
"文章很值,打赏犒劳作者一下"
微信号: Javaweb_engineer

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

与本文相关的文章

发表我的评论
取消评论

表情

您的回复是我们的动力!

  • 昵称 (必填)

网友最新评论