java 代碼實現使用Druid 鏈接池獲取數據庫鏈接

因爲原先使用的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;     

    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章