作的是c3p0的链接池配置!因此请先下载相关的c3p0.jar包以及链接池包 mysql
/**
* 该类是初始化链接池 或则获得链接
* @author SkyWen
*
*/
public class DynamicDataSourcePool {
private static final Log log = LogFactory.getLog(DynamicDataSourcePool.class);
private ComboPooledDataSource pool=null;//申明C3p0数据链接池变量
/**
* 默认的构造方法
* @param userName 数据库用户名
* @param pass 数据库密码
* @param url 链接的url
* @param driverClass 数据驱动
*/
public DynamicDataSourcePool(String userName,String pass,String url,String driverClass) {
try {
this.pool=new ComboPooledDataSource();//建立对象
this.pool.setDriverClass(driverClass);//设置驱动
this.pool.setJdbcUrl(url); //设置链接的url
this.pool.setUser(userName);//设置数据库用户名
this.pool.setPassword(pass);//设置数据库密码
this.pool.setAcquireIncrement(3);//当链接池中的链接耗尽的时候c3p0一次同时获取的链接数
this.pool.setAutoCommitOnClose(false);//链接关闭时默认将全部未提交的操做回滚
this.pool.setBreakAfterAcquireFailure(false);//获取链接失败后该数据源将申明已断开并永久关闭
this.pool.setCheckoutTimeout(1000);//当链接池用完时客户端调用getConnection()后等待获取新链接的时间,超时后将抛出SQLException,如设为0则无限期等待。单位毫秒。
this.pool.setIdleConnectionTestPeriod(60);//每60秒检查全部链接池中的空闲链接
this.pool.setInitialPoolSize(10);//初始化时获取10个链接,取值应在minPoolSize与maxPoolSize之间
this.pool.setMaxPoolSize(40);//链接池中保留的最大链接数
this.pool.setMinPoolSize(5);//链接池最小链接数
this.pool.setMaxIdleTime(60);//最大空闲时间,60秒内未使用则链接被丢弃
this.pool.setNumHelperThreads(3);//c3p0是异步操做的,缓慢的JDBC操做经过帮助进程完成。扩展这些操做能够有效的提高性能经过多线程实现多个操做同时被执行
log.info("数据库链接池初始化成功");
} catch (PropertyVetoException e) {
e.printStackTrace();
}
}
/**
* 获得链接
* @return
*/
public Connection getConnection(){
try {
return this.pool.getConnection();
} catch (SQLException e) {
log.info("获取链接异常");
e.printStackTrace();
}
return null;
}
/**
* 关闭
*/
public void destroy(){
if(null!=this.pool)this.pool.close();
}
} sql
以上这个类是初始化链接池!下面DynamicDataSourcePoolFactory类是链接池的工厂 数据库
/**
* 该类是链接池的管理类
* @author SkyWen
*
*/
public class DynamicDataSourcePoolFactory {
private static Hashtable<String , DynamicDataSourcePool> hashtable=null;
private static DynamicDataSourcePoolFactory dataSourcePoolFactory;
private DynamicDataSourcePoolFactory(){
}
public static DynamicDataSourcePoolFactory getInstance(){
if(null==dataSourcePoolFactory){
hashtable=new Hashtable<String , DynamicDataSourcePool>();
dataSourcePoolFactory=new DynamicDataSourcePoolFactory();
}
return dataSourcePoolFactory;
}
/**
* 绑定链接池
* @param key 链接池的名称必须惟一
* @param dataSourcePool 对应的链接池
*/
public void bind(String key,DynamicDataSourcePool dataSourcePool){
if(IsBePool(key))getDynamicDataSourcePool(key).destroy();
hashtable.put(key, dataSourcePool);
}
/**
* 从新绑定链接池
* @param key 链接池的名称必须惟一
* @param dataSourcePool 对应的链接池
*/
public void rebind(String key,DynamicDataSourcePool dataSourcePool){
if(IsBePool(key))getDynamicDataSourcePool(key).destroy();
hashtable.put(key, dataSourcePool);
}
/**
* 删除动态数据链接池中名称为key的链接池
* @param key
*/
public void unbind(String key){
if(IsBePool(key))getDynamicDataSourcePool(key).destroy();
hashtable.remove(key);
}
/**
* 查找动态数据链接池中是否存在名称为key的链接池
* @param key
* @return
*/
public boolean IsBePool(String key){
return hashtable.containsKey(key);
}
/**
* 根据key返回key对应的链接池
* @param key
* @return
*/
public DynamicDataSourcePool getDynamicDataSourcePool(String key){
if(!IsBePool(key))return null;
return (DynamicDataSourcePool)hashtable.get(key);
}
}
下面这个类是个测试的类DynamicDataSourcePoolTest!我用的是mysql数据库!其中我只是添加了一个实例!能够本身在添加一个!若是有朋友不懂的话 请给我留言 多线程
String localurl="jdbc:mysql://127.0.0.1:3306/skywen?useUnicode=true&characterEncoding=gbk"; 异步
DynamicDataSourcePool dataSourcePool1=new DynamicDataSourcePool("aa","aa",localurl,"com.mysql.jdbc.Driver"); 性能
DynamicDataSourcePoolFactory factory=DynamicDataSourcePoolFactory.getInstance(); 测试
/*实体类的对象*/ ui
GameServer gameServer=new GameServer();
factory.bind(Key.getKey(gameServer), dataSourcePool1); this
/*判读是否存在这个链接池*/
System.out.println(factory.IsBePoolKey.getKey(gameServer)); url
/*获得链接*/ Connection connection161=factory.getDynamicDataSourcePool(Key.getKey(gameServer)).getConnection();