您的位置:首页 > 产品设计 > UI/UE

java 代码实现使用Druid 链接池获取数据库链接

2017-12-27 16:38 841 查看
因为原先使用的c3p0链接池,时常出现:APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tasks,以及出现线程死锁的情况导致服务器经常需要重启,很是头疼。所以考虑使用Druid 链接池来代替原先的c3p0.

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 数据库