java 代码实现使用Druid 链接池获取数据库链接
2017-12-27 16:38
841 查看
因为原先使用的c3p0链接池,时常出现:APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tasks,以及出现线程死锁的情况导致服务器经常需要重启,很是头疼。所以考虑使用Druid 链接池来代替原先的c3p0.
Alibaba Druid中文文档
Alibaba Druid中文文档
package db.conn; import java.sql.Connection; //引入站点的配置信息 import config.Config; import com.alibaba.druid.pool.DruidDataSource; /** * 数据库连接生成类,返回一个数据库连接对象 * 构造函数完成数据库驱动的加载和数据的连接 * 提供数据库连接的取得和数据库的关闭方法 * @author yuyu * */ public class DbConnect { private static DruidDataSource dataSourceMDB=null; private static DruidDataSource dataSourceSSO=null; public String db; /** * 构造函数完成数据库的连接和连接对象的生成 * @throws Exception */ public DbConnect(){ } public void GetDbConnectSSO() throws Exception { try{ if(dataSourceSSO==null){ dataSourceSSO=new DruidDataSource(); //设置连接参数 dataSourceSSO.setUrl(Config.DBURL); dataSourceSSO.setDriverClassName(Config.DBDRIVER); dataSourceSSO.setUsername(Config.DBUSER); dataSourceSSO.setPassword(Config.DBPASSWORLD); //配置初始化大小、最小、最大 dataSourceSSO.setInitialSize(1); dataSourceSSO.setMinIdle(1); dataSourceSSO.setMaxActive(20); //连接泄漏监测 dataSourceSSO.setRemoveAbandoned(true); dataSourceSSO.setRemoveAbandonedTimeout(30); //配置获取连接等待超时的时间 dataSourceSSO.setMaxWait(20000); //配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 dataSourceSSO.setTimeBetweenEvictionRunsMillis(20000); //防止过期 dataSourceSSO.setValidationQuery("SELECT 'x'"); dataSourceSSO.setTestWhileIdle(true); dataSourceSSO.setTestOnBorrow(true); } }catch(Exception e){ throw e; } } public void GetDbConnectMDB() throws Exception { try{ if(dataSourceMDB==null){ dataSourceMDB=new DruidDataSource(); //设置连接参数 dataSourceMDB.setUrl(Config.MDB_DBURL); dataSourceMDB.setDriverClassName(Config.DBDRIVER); dataSourceMDB.setUsername(Config.MDB_DBUSER); dataSourceMDB.setPassword(Config.MDB_DBPASSWORLD); //配置初始化大小、最小、最大 dataSourceMDB.setInitialSize(1); dataSourceMDB.setMinIdle(1); dataSourceMDB.setMaxActive(20); //连接泄漏监测 dataSourceMDB.setRemoveAbandoned(true); dataSourceMDB.setRemoveAbandonedTimeout(30); //配置获取连接等待超时的时间 dataSourceMDB.setMaxWait(20000); //配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 dataSourceMDB.setTimeBetweenEvictionRunsMillis(20000); //防止过期 dataSourceMDB.setValidationQuery("SELECT 'x'"); dataSourceMDB.setTestWhileIdle(true); dataSourceMDB.setTestOnBorrow(true); } }catch(Exception e){ throw e; } } /** * 取得已经构造生成的数据库连接 * @return 返回数据库连接对象 * @throws Exception */ public Connection getConnect(String str) throws Exception{ Connection con=null; this.db=str; try { if(db.equals("MDB")){ GetDbConnectMDB(); con=dataSourceMDB.getConnection(); }else if(db.equals("SSO")){ GetDbConnectSSO(); con=dataSourceSSO.getConnection(); } } catch (Exception e) { throw e; } return con; } }
相关文章推荐
- java 代码实现使用Druid 链接池获取数据库链接
- java 获取数据库连接的实现代码
- 使用SQLCipher进行数据库加密代码实现以及java.lang.UnsatisfiedLinkError 报错的解决
- 使用监听器实现JAVA代码对数据库的定时操作,求大神帮帮忙!!!
- 目前使用的JAVA数据库链接管理类
- Java实现嵌入式数据库(文本数据库)代码实例
- 用Java线程获取优异性能(II)——使用同步连载线程访问关键代码部份
- 用Java线程获取优异性能(II)——使用同步连载线程访问关键代码部份
- 在B/S模式下使用java代理导入excel文件的实现方法及代码
- java代码获取数据库连接并操作数据库用户
- 使用PHP获取网络文件的实现代码
- java代码获取数据库连接并操作数据库用户
- 实现高效的数据库连接池(附带完整代码C#和Java实现)(转)
- 使用自定义标签实现JSP页面和Java代码分离
- 关于抽象工厂实现数据库查询的设计(JAVA代码实现)
- 用Java线程获取优异性能(II)——使用同步连载线程访问关键代码部份
- 实现高效的数据库连接池(附带完整代码C#和Java实现)
- 使用eclipse的JDT实现JAVA代码格式化功能
- 用Java线程获取优异性能(II)——使用同步连载线程访问关键代码部份
- 用简单工厂方法设计的数据库查询(JAVA代码实现)