動態建立多個串連池__java

來源:互聯網
上載者:User
系統情境:系統依賴多個資料庫。其中一台資料庫伺服器運行ORACLE,同時還有數台機器上跑著ObjectServer記憶體資料庫。由於到部署時才能確定從機的數量,因此需要動態建立串連池

方案:Oracle資料庫用c3p0來管理串連池。另外寫一個連線管理員來動態建立記憶體資料庫連接池

代碼:經過簡化,只貼出關鍵代碼,去掉日誌、異常處理、null檢查等
// ObejctServer串連池,系統中域的數量與該類執行個體一一對應 public class DBConnectionPool{    private int checkedOut;// 已檢出的串連數    private Vector<Connection> freeConnections = new Vector<Connection>();// 空閑串連數    // 返還串連    public synchronized void freeConnection(Connection con, Object lock)    {        freeConnections.addElement(con);        this.checkedOut--;        lock.notifyAll();    }    // 從串連池中擷取串連    public Connection getConnection(Object lock)    {        Connection con;        while ((con = fetchConnection()) == null)// 迴圈調用fetchConnection()方法        {                        lock.wait(timeout);// 沒擷取到可用串連,則等待            // 如果逾時了,則return null        }        return con;    }}

// ObjectServer連線管理員public class DBConnectionManager{    private Hashtable<String, DBConnectionPool> pools;// 串連池集合,每個OS域都有一個串連池       private static final byte[] lock = new byte[0];// 同步鎖            // 返還串連    public void freeConnection(String domainName, Connection conn)    {        synchronized (lock)        {                     DBConnectionPool pool = (DBConnectionPool) pools.get(domainName);// 得到網域名稱對應的串連池                       pool.freeConnection(conn, lock);                 }    }    // 獲得某從機上的可用串連    public Connection getConnection(String domainName)    {        synchronized (lock)        {                                 DBConnectionPool pool = (DBConnectionPool) pools.get(domainName);            if (null != pool)// 串連池已存在,直接使用            {                return pool.getConnection(lock);                       }            else            {                registerNewConnectionPool(poolProvide);// 註冊新串連池                return getConnection(domainName);// 遞迴調用                    }            return null;        }    }}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.