javaee之连接池解析

现在社会上出了很多的数据库连接池技术,但是主流的也就那么一两个,如c3p0、dbcp等。今天,我们就来学习一下数据库连接池技术


一、关于dbcp技术

首先也是需要导入dbcp的jar包:

common-dbcp-xxx.jar

common-pool-xxx.jar

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

import org.apache.commons.dbcp.BasicDataSource;


public class MyDBCP {

	//需要连接数据库的各种配置
	private static String driverClass = "com.mysql.jdbc.Driver";
	private static String url = "jdbc:mysql://localhost:3306/day18";
	private static String user = "root";
	private static String password = "123";
	
	//定义一个连接池对象BasicDataSource
	private static BasicDataSource ds = new BasicDataSource();
	
	static {
		//设置需要进行连接数据库的各种参数设置
		ds.setDriverClassName(driverClass);
		ds.setUrl(url);
		ds.setUsername(user);
		ds.setPassword(password);
		
		//连接池初始化的连接数
		ds.setInitialSize(5);
		//连接池最大的连接数,超过则会进行等待其他的连接回收
		ds.setMaxActive(10);
		//超出连接数等待的时间,超过则会抛异常
		ds.setMaxWait(3000);
		
	}
	
	
	public static Connection getConn(){
		try {
			Connection conn = ds.getConnection();
			return conn;
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}
}
在dbcp连接池技术中,同样也可以使用properties文件进行配置


二、关注c3p0连接池

同样也是要导入c3p0的jar包

c3p0-xxx.jar

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

import com.mchange.v2.c3p0.ComboPooledDataSource;


public class MyC3P0 {

	/*
	 * 采用配置文件,这些配置信息可以不用写在这里,但是没有xml配置文件则需要定义数据
	private static String driverClass = "com.mysql.jdbc.Driver";
	private static String url = "jdbc:mysql://localhost:3306/day18";
	private static String user = "root";
	private static String password = "123";
	
	*/
	
	//定义一个无参的构造方法,表示的是加载默认的配置,在xml配置文件中<defalut>中的数据
	private static ComboPooledDataSource ds = new ComboPooledDataSource();
	//定义有参的构造,表示的是加载在xml文件中<name>中规定的数据库
//	private static ComboPooledDataSource ds = new ComboPooledDataSource("day17");
	
	
	/*
	static{
		
		try {
			//设置连接数据库所需要的参数,驱动程序,url,用户,密码
			ds.setDriverClass(driverClass);
			ds.setJdbcUrl(url);
			ds.setUser(user);
			ds.setPassword(password);
			
			//设置连接池一开始定义的连接数
			ds.setInitialPoolSize(5);
			//设置连接池最大的连接数,超出以后则需要进行等待
			ds.setMaxPoolSize(10);
			//设置连接池的连接数,如果等待的时间超过了这个时间的话就会抛出异常
			ds.setCheckoutTimeout(3000);
			
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
		
	}
	*/
	
	public static  Connection getConn(){
		try {
			Connection conn = ds.getConnection();
			
			return conn;
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
		
	}


	public static void close(Connection conn) {
		try {
			if(conn !=null) conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
}
在类加载的内路径下,设置c3p0-config.xml可以进行配置

<c3p0-config>
  <default-config>
     <property name="driverClass">com.mysql.jdbc.Driver</property> 
     <property name="jdbcUrl">jdbc:mysql://localhost:3306/day18</property> 
     <property name="user">root</property> 
     <property name="password">123</property> 
     <property name="initialPoolSize">5</property> 
     <property name="maxPoolSize">10</property> 
	 <property name="checkoutTimeout">3000</property>
	
  </default-config>


  <named-config name="day17">
  	<!-- 表示要连接的指定数据库 -->
    <property name="driverClass">com.mysql.jdbc.Driver</property> 
     <property name="jdbcUrl">jdbc:mysql:///day17</property> 
     <property name="user">root</property> 
     <property name="password">123</property> 
     <property name="initialPoolSize">5</property> 
     <property name="maxPoolSize">10</property> 
   </named-config>

</c3p0-config>


今天学习的这两种技术,对于以后操作数据访问层来说是必不可少的技术,能够避免浪费connection资源,更关注于去学习c3p0技术,dbcp现今有点漏洞,以至于有点被淘汰了,所以c3p0是现在数据库连接池技术的主流


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值