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);
}
}
}
java 数据库连接方式(三)
最新推荐文章于 2023-04-22 14:34:47 发布