java 数据库连接方式(三)

import com.mchange.v2.c3p0.ComboPooledDataSource;
import com.mchange.v2.c3p0.DataSources;
import com.xxx.config.*;



/**
 * C3p0连接池连接工厂实现类。<br>
 * 配置说明:<br>
 * DBMaxConnectionCount:连接池最大连接数<br>
 * DBMinConnectionCount:连接池最小连接数<br>
 * DBInitConnectionCount:连接池初始连接数
 * @author 
 */
public class C3p0ConnectionFactory extends SimpleConnectionFactory {
	private ComboPooledDataSource ds = null;
	int connectionPoolMin = 1;
	int connectionPoolSize = 3;
	int connectionPoolMax = 30;
	
	protected C3p0ConnectionFactory() {
	}
	
	/**
	 * 销毁连接池
	 */
	public void destroy() {
		try {
			if (ds != null)
				DataSources.destroy(ds);
		}catch(Exception ex){}
	}

	/**
	 * 从连接池得到连接对象
	 * @return ConnectionObject对象
	 */
	public ConnectionObject getConnection() {
		try {
			ConnectionObject co = ConnectionManager.newConnectionObject();
			co.conn = ds.getConnection();
			co.createTime = System.currentTimeMillis();
			return co; 
		}catch(Exception ex){
			throw new DBException(ex);
		}
	}

	/**
	 * 新建连接对象
	 * @return 一个新的ConnectionObject对象
	 */
	public ConnectionObject newConnection() {
		return this.getConnection();
	}

	/**
	 * 释放连接对象到连接池
	 * @param co 将被释放的ConnectionObject对象
	 */
	public void freeConnection(ConnectionObject co) {
		if (co == null) return;
		
		co.close();
	}

	/**
	 * 关闭连接对象
	 * @param co 将被关闭的ConnectionObject对象
	 */
	public void closeConnection(ConnectionObject co) {
		this.freeConnection(co);
	}

	/**
	 * 初始化
	 * @param conf 数据库配置
	 */
	public void init(Configs conf){
		super.init(conf);
		
		try {
			connectionPoolMin = Integer.parseInt(conf.getConfig(ConfigKeys.dbMinConnKey, "1"));
		}catch(Exception ex){}

		if (connectionPoolMin < 0)
			connectionPoolMin = 1;

		try {
			connectionPoolSize = Integer.parseInt(conf.getConfig(ConfigKeys.dbInitConnKey, "1"));
		}catch(Exception ex){}

		if (connectionPoolSize < connectionPoolMin)
			connectionPoolSize = connectionPoolMin;
		
		try {
			connectionPoolMax = Integer.parseInt(conf.getConfig(ConfigKeys.dbMaxConnKey, "30"));
		}catch(Exception ex){}

		if (connectionPoolMax < 0)
			connectionPoolMax = 100;
		
		if (connectionPoolMax < connectionPoolMin)
			connectionPoolMax = connectionPoolMin * 2;
		
		try {
			ds = new ComboPooledDataSource();
			ds.setDriverClass(this.driver);
	        ds.setJdbcUrl(this.url);
	        ds.setUser(this.user);
	        ds.setPassword(this.pwd);
	        ds.setInitialPoolSize(this.connectionPoolSize);
	        ds.setMaxPoolSize(this.connectionPoolMax);
	        ds.setMinPoolSize(this.connectionPoolMin);
	        ds.setAcquireIncrement(5);
		}catch(Exception ex){
			throw new DBException(ex);
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值