在这里记录对c3p0连接池管理的一些代码
一、连接池管理类
import java.sql.Connection;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.jdom.Document;
import org.jdom.Element;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import com.shine.framework.util.XMLUtil;
/**
* 数据库连接池管理器,基于C3P0
*
*/
public class ConnPoolManager {
private final static ConnPoolManager instance = new ConnPoolManager();
private Map pools = new HashMap();
private ConnPoolManager(){
}
public static ConnPoolManager getInstance(){
return instance;
}
/**
* 初始化连接池
* @param configPath 配置文件路径
*/
public void initial(String configPath){
Document configDoc = XMLUtil.file2Doc(configPath);
List res = configDoc.getRootElement().getChildren("Resource");
if(res!=null){
for(Element re:res){
String name = null;
try{
name = re.getAttributeva lue("name");
String driverClassName = re.getAttributeva lue("driverClassName");
String jdbcUrl = re.getAttributeva lue("jdbcUrl");
String username = re.getAttributeva lue("username");
String password = re.getAttributeva lue("password");
String minPoolSize = re.getAttributeva lue("minPoolSize");
String maxPoolSize = re.getAttributeva lue("maxPoolSize");
String initialPoolSize = re.getAttributeva lue("initialPoolSize");
String acquireIncrement = re.getAttributeva lue("acquireIncrement");
String idleConnectionTestPeriod = re.getAttributeva lue("idleConnectionTestPeriod");
String checkoutTimeout = re.getAttributeva lue("checkoutTimeout");
String maxStatement = re.getAttributeva lue("maxStatement");
String maxStatementsPerConnection = re.getAttributeva lue("maxStatementsPerConnection");
String maxIdleTime = re.getAttributeva lue("maxIdleTime");
String numHelperThreads = re.getAttributeva lue("numHelperThreads");
ComboPooledDataSource pool = new ComboPooledDataSource();
pool.setDataSourceName(name); //数据源名称
pool.setDriverClass(driverClassName); //数据库驱动类名
pool.setJdbcUrl(jdbcUrl); //数据库连接url
pool.setUser(username); //数据库用户名
pool.setPassword(password); //数据库密码
pool.setMinPoolSize(string2int(minPoolSize, 2)); //最小连接数
pool.setInitialPoolSize(string2int(initialPoolSize, 5)); //初始化连接数
pool.setMaxPoolSize(string2int(maxPoolSize, 20)); //最大连接数
pool.setAcquireIncrement(string2int(acquireIncrement, 3)); //连接数的增量
pool.setIdleConnectionTestPeriod(string2int(idleConnectionTestPeriod, 120)); //检测空闲连接的时间间隔,单位为秒
pool.setCheckoutTimeout(string2int(checkoutTimeout, 3000)); //获取连接的超时时间,超时则抛出异常,单位为毫秒
pool.setMaxStatements(string2int(maxStatement, 0)); //最大statement数
pool.setMaxStatementsPerConnection(string2int(maxStatementsPerConnection, 0)); //单个连接所拥有的最大statement缓存数
pool.setMaxIdleTime(string2int(maxIdleTime, 300)); //最大空闲时间,该时间内未使用的连接将被丢弃,单位为秒
pool.setNumHelperThreads(string2int(numHelperThreads, 3)); //帮助线程个数,通过多线程同时执行SQL
pools.put(name, pool);
System.out.println("注册数据库连接池"+name);
}c