最近我作了數(shù)據(jù)庫(kù)JSP的頻繁連接,在此給出數(shù)據(jù)庫(kù)連接池的必要性,對(duì)于JSP來(lái)說(shuō)一個(gè)很好的J2EE服務(wù)器是很必要的,JBOOS,WebLogic都是很好的解決方案。 如圖所示,當(dāng)程序中需要建立數(shù)據(jù)庫(kù)連接時(shí),只須從內(nèi)存中取一個(gè)來(lái)用而不用新建。同樣,使用完畢后,只需放回內(nèi)存即可。而連接的建立、斷開(kāi)都有連接池自身來(lái)管理。同時(shí),我們還可以通過(guò)設(shè)置連接池的參數(shù)來(lái)控制連接池中的連接數(shù)、每個(gè)連接的最大使用次數(shù)等等。通過(guò)使用連接池,將大大提高程序效率,同時(shí),我們可以通過(guò)其自身的管理機(jī)制來(lái)監(jiān)視數(shù)據(jù)庫(kù)連接的數(shù)量、使用情況等。下面我們以一個(gè)名為ConnectionPool的連接池為例來(lái)看看連接池的實(shí)現(xiàn)。先看看ConnectionPool的基本屬性: m_ConnectionPoolSize:連接池中連接數(shù)量下限 m_ConnectionPoolMax:連接池中連接數(shù)量上限 m_ConnectionUseCount:一個(gè)連接的最大使用次數(shù) m_ConnectionTimeout:一個(gè)連接的最長(zhǎng)空閑時(shí)間 m_MaxConnections = -1:同一時(shí)間的最大連接數(shù) m_timer:定時(shí)器 這些屬性定義了連接池與其中的每個(gè)連接的有效狀態(tài)值。連接池的自我管理,實(shí)際上就是通過(guò)定時(shí)的對(duì)每個(gè)連接的狀態(tài)、連接的數(shù)量進(jìn)行判斷而進(jìn)行相應(yīng)操作。其管理流程如下: 通過(guò)上圖,我們可以定義出ConnectionPool要完成管理所需要的基本接口: public class ConnectionPool implements TimerListener{ public boolean initialize() //連接池初始化 public void destroy() //連接池的銷(xiāo)毀 public synchronized java.sql.Connection getConnection() //取一個(gè)連接 public synchronized void close() //關(guān)閉一個(gè)連接 private synchronized void removeFromPool() //把一個(gè)連接從連接池中刪除 private synchronized void fillPool() //維護(hù)連接池大小 public synchronized void TimerEvent() //定時(shí)器事件處理函數(shù) } 通過(guò)這幾個(gè)接口,已經(jīng)可以完成連接池的基本管理。在TimeEvent()函數(shù)中完成連接池的狀態(tài)檢驗(yàn)工作,fillPool()時(shí)連接池至少保持最小連接數(shù)。因?yàn)槲覀円4婷恳粋(gè)連接的狀態(tài),所以還需要一個(gè)數(shù)據(jù)庫(kù)連接對(duì)象: class ConnectionObject{ public java.sql.Connection con; public boolean inUse; //是否被使用標(biāo)志 public long lastAccess; //最近一次開(kāi)始使用時(shí)間 public int useCount; //被使用次數(shù) } 加入了ConnectionObject對(duì)象后,在ConnectionPool中操作的應(yīng)該只是ConnectionObject,而其他進(jìn)程需要的只是ConnectionObject的con屬性,因此我們?cè)偌尤胍粋(gè)類(lèi),作為其他進(jìn)程獲得與返回連接的接口: CLASS Conn{ GetConnection(); //從連接池中取出一個(gè)有效連接 CloseConnection(); //返回連接,此時(shí)并沒(méi)有關(guān)閉連接,只是放回了連接池 DestroyPool(); //銷(xiāo)毀連接池 } 最后我們的整個(gè)系統(tǒng)總的架構(gòu)如下: 通過(guò)上面的介紹,我們可以看出,連接池技術(shù)的關(guān)鍵就是其自身的管理機(jī)制,以上的管理流程只是本人一點(diǎn)見(jiàn)解,關(guān)鍵是想向大家介紹一種思路,在此基礎(chǔ)上,您可以進(jìn)一步完善連接池技術(shù)為您所用。 |
溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!