3.5 單例模式在資料庫連線池管理中的實際應用
阿新 • • 發佈:2018-12-30
目前大多數程式開發都需要用到資料庫連線池,在資料庫連線池的管理類中,就使用了單例模式,來實現對連線池的管理。這裡模擬一個連線池的 管理類Manager.java,它的示意程式碼如下:
//***Manage.java*********************
public class Manager{
static private Manager instance;//單例模式
private static Map connPool = new HashMap();
//return Manager
static synchronized public Manager getInstance (){
if (instance == null) instance = new Manager();
return instance;
}
private Manager(){ init(); }//防止其他物件建立本類的例項
//根據名稱從map中獲取連線
public static Connection getConnection(String name){
Connection conn = null;
try{
//從連線池中獲取連線
ConnectionPool pool = (ConnecionPoolImpl)connPool.get (name);
if (pool != null) conn = pool.getConnection();
}catch(Exception ex){
ex.printStackTrace();
}finally{
return conn;
}
}
//將連線返回連線池
Public static void returnConnection(String name, Connection conn){
try{
ConnecitonPool pool = (ConnectionPoolImpl)connPool.get (name);
if (pool != null) pool.returnConnection();
}catch(Exception e){
e.printStackTrace();
}
}
//關閉所有的連線
public synchronized void release(){
try{
Set set = connPool.entrySet();
Iterator iterator =set.iterator();
while(iterator.hasNext()){
Map.Entry map = (Map.Entry)iterator.next();
ConnectionPool pool = (ConnecitonPoolImpl)map.getValue();
//關閉連線池
pool.setConnWitch("OFF");
}
connPool = null;
}catch(Exception e){
e.printStackTrace();
}
}
//建立連線池
private void createPools(){
ConnectionPool pool = new ConnectionPoolImpl();
//設定連線池大小
pool.setMaxConns(10);
try{
//表示建立連線池
pool.setConnWitch("ON");
//將建立後的連線池放在Map中,用mysql表示是用於連線mysql資料庫的
connPool.put("mysql",pool);
}catch(Exception e){
e.printStackTrace();
}
}
//初始化
private void init(){
//建立連線池
createPools();
}
}