1. 程式人生 > >資料庫連線池原理及應用

資料庫連線池原理及應用

1、運作原理 在實際應用開發中,特別是在WEB應用系統中,如果JSP、Servlet或EJB使用 JDBC直接訪問資料庫中的資料,每一次資料訪問請求都必須經歷建立資料庫連線、開啟資料庫、存取資料和關閉資料庫連線等步驟,而連線並開啟資料庫是一件既消耗資源又費時的工作,如果頻繁發生這種資料庫操作,系統的效能必然會急劇下降,甚至會導致系統崩潰。資料庫連線池技術是解決這個問題最常用的方法,在許多應用程式伺服器(例如:Weblogic,WebSphere,JBoss)中,基本都提供了這項技術,無需自己程式設計,但是,深入瞭解這項技術是非常必要的。 資料庫連線池技術的思想非常簡單,將資料庫連線作為物件儲存在一個Vector物件中,一旦資料庫連線建立後,不同的資料庫訪問請求就可以共享這些連線,這樣,通過複用這些已經建立的資料庫連線,可以克服上述缺點,極大地節省系統資源和時間。 資料庫連線池的主要操作如下: (1)建立資料庫連線池物件(伺服器啟動)。 (2)按照事先指定的引數建立初始數量的資料庫連線(即:空閒連線數)。 (3)對於一個數據庫訪問請求,直接從連線池中得到一個連線。如果資料庫連線池物件中沒有空閒的連線,且連線數沒有達到最大(即:最大活躍連線數),建立一個新的資料庫連線。 (4)存取資料庫。 (5)關閉資料庫,釋放所有資料庫連線(此時的關閉資料庫連線,並非真正關閉,而是將其放入空閒佇列中。如實際空閒連線數大於初始空閒連線數則釋放連線)。 (6)釋放資料庫連線池物件(伺服器停止、維護期間,釋放資料庫連線池物件,並釋放所有連線) 2、連線池模型
連線池包括一個連線池類(DBConnectionPool)和一個連線池管理類(DBConnetionPoolManager)。連線池類是對某一資料庫所有連線的“緩衝池”,主要實現以下功能:①從連線池獲取或建立可用連線;②使用完畢之後,把連線返還給連線池;③在系統關閉前,斷開所有連線並釋放連線佔用的系統資源;④還能夠處理無效連線(原來登記為可用的連線,由於某種原因不再可用,如超時,通訊問題),並能夠限制連線池中的連線總數不低於某個預定值和不超過某個預定值。 連線池管理類是連線池類的外覆類(wrapper),符合單例模式,即系統中只能有一個連線池管理類的例項。其主要用於對多個連線池物件的管理,具有以下功能:①裝載並註冊特定資料庫的JDBC驅動程式;②根據屬性檔案給定的資訊,建立連線池物件;③為方便管理多個連線池物件,為每一個連線池物件取一個名字,實現連線池名字與其例項之間的對映;④跟蹤客戶使用連線情況,以便需要時關閉連線釋放資源。連線池管理類的引入主要是為了方便對多個連線池的使用和管理,如系統需要連線不同的資料庫,或連線相同的資料庫但由於安全性問題,需要不同的使用者使用不同的名稱和密碼。 3、連線池使用
上面所實現的連線池在程式開發時如何應用到系統中呢?下面以Servlet為例說明連線池的使用。 Servlet的生命週期是:在開始建立servlet時,呼叫其初始化(init)方法。之後每個使用者請求都導致一個呼叫前面建立的例項的service方法的執行緒。最後,當伺服器決定解除安裝一個servlet時,它首先呼叫該servlet的 destroy方法。 根據servlet的特點,我們可以在初始化函式中生成連線池管理類的唯一例項(其中包括建立一個或多個連線池)。如: public void init() throws ServletException { connMgr = DBConnectionManager.getInstance(); } 然後就可以在service方法中通過連線池名稱使用連線池,執行資料庫操作。最後在destroy方法中釋放佔用的系統資源,如: public void destroy() { connMgr.release(); super.destroy(); } 4、結束語 在學習軟體開發的過程中,資料庫連線的管理是個難點,需要大家下很大的功夫去理解去實踐,具體例項的資料庫連線,需要大家進行更深層次的擴充套件。