/**
* 该类是初始化连接池 或则得到连接
* @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();
}
}
以上这个类是初始化连接池!下面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();
/*实体类的对象*/
GameServer gameServer=new GameServer();
factory.bind(Key.getKey(gameServer), dataSourcePool1);
/*判读是否存在这个连接池*/
System.out.println(factory.IsBePoolKey.getKey(gameServer));
/*得到连接*/
Connection connection161=factory.getDynamicDataSourcePool(Key.getKey(gameServer)).getConnection();
转载自:http://skywen.iteye.com/blog/313161
分享到:
相关推荐
数据源连接池的基本用法,配置信息,代码案例、 实现数据源的动态切换和案例 数据源连接池的基本用法,配置信息,代码案例、 实现数据源的动态切换和案例 数据源连接池的基本用法,配置信息,代码案例、 实现...
springboot+mybatis多数据源+动态数据源配置(连接池),mysql数据库,代码实现了简单的读写分离,但是不建议这种操作,建议使用数据库中间件进行读写分离,例如使用mycat进行读写分离主从热备,使用该代码对于多个...
用数据源连接池配置/用数据源连接池配置/用数据源连接池配置/用数据源连接池配置/
Hibernate的三种连接池设置C3P0、Proxool和DBCP. 详细说明及配置方法 Hibernate支持第三方的连接池,官方推荐的连接池是C3P0,Proxool,以及DBCP.
通过SpringAop实现多数据源的动态切换 并采用Druid连接池,可扩展继续增加数据库配置。
springboot连接池、动态配置多数据源连接池,特别适合大数据部门、数据中台服务的多数据源连接池.zip
weblogic数据源连接池的创建步骤,很快很好很方便
4. 实现动态数据源连接池属性配置 5. 采用双端队列实现链式数据库切换 6. 实现事务内切换数据源(支持原生Spring声明式事务哟,仅此一家),并支持多数据源事务回滚(有了它除了跨服务的事务你需要考虑分布式事务,其他...
Java动态代理实现数据源连接池,用代理类实现的连接池代码,绝对完整的案例,下载源码就能跑起来!Java动态代理实现数据源连接池,用代理类实现的连接池代码
在GlassFish中配置数据源连接池
在tomcat中配置数据源连接池的配置方法,及jar包文件。
连接池数据源配置:其中包括类;属性以及说明文件;很详细;让你轻松摆脱开发工具来发布工程
在实际项目的开发中,特别是web应用程序中,如Jsp,Servlet或EJB使用JDBC直接访问数据库中的...使用数据库连接池技术是解决上述问题的最常用的方法,在许多应用服务器(如 websphere, weblogic ,jBoss)中都提供了这种技术
NULL 博文链接:https://kingxss.iteye.com/blog/1479451
演示用c3p0组件做连接池 演示用JNDI(jtds组件)做连接池
在WebLogic中建立数据库连接池与数据源及利用JBuilder进行测试
java 数据源连接池比较,主要对比c3po与proxy数据源配置说明
数据源连接池.zip
. 连接池基本的思想,原理 数据库连接池技术的优点: c3p0的使用
为什么使用连接池 数据源和连接池的概念 配置Tomcat