劉 娟
蚌埠學(xué)院計算機科學(xué)與技術(shù)系,安徽 蚌埠 233000
使用JDBC訪問數(shù)據(jù)庫時,先加載相應(yīng)驅(qū)動,接著創(chuàng)建連接對象,向連接對象發(fā)送SQL語句訪問數(shù)據(jù)庫,使用完畢后關(guān)閉連接對象。普通WEB應(yīng)用訪問數(shù)據(jù)庫的頻率低,可以滿足要求。但如果客戶端數(shù)量非常多,系統(tǒng)會不斷創(chuàng)建、關(guān)閉連接,頻繁進行內(nèi)存操作,影響系統(tǒng)性能。另外,程序異??赡軐?dǎo)致系統(tǒng)不能及時釋放連接對象,產(chǎn)生內(nèi)存泄露,導(dǎo)致內(nèi)存資源耗盡。為了解決這些問題,可以采用連接池技術(shù),從而減少不必要系統(tǒng)開銷,避免內(nèi)存泄露,提高系統(tǒng)性能。
連接池技術(shù)原理是預(yù)先創(chuàng)建容器對象,并放入一些連接對象。需要使用連接對象時,直接從連接池中獲取。用完后不關(guān)閉連接對象,將其放回連接池。連接池可以通過設(shè)置最少連接數(shù)和最大連接數(shù)來保持可用對象數(shù)量和避免無限制使用連接對象。
1)建立連接池。連接池的基本功能就是管理連接對象。創(chuàng)建連接池時,可以預(yù)先分配指定數(shù)量的連接對象放入集合類中,分配和釋放都將對集合類進行操作,可以減少由頻繁內(nèi)存操作帶來的系統(tǒng)開銷。
2)獲取與釋放連接對象。需要連接對象時,先獲取連接池中空閑連接對象,沒有則獲取某個連接對象進行復(fù)用。這里采用的復(fù)用技術(shù)為引用計數(shù)法。引用計數(shù)表示資源使用者的數(shù)量。首先為每個連接對象提供一個引用計數(shù),初始化引用計數(shù)為0,使用時引用計數(shù)加1。連接對象使用完畢,引用計數(shù)減1。若引用計數(shù)為0,則表示連接對象處于空閑狀態(tài),將其放回連接池中,等待再次使用。
3)定時管理。定時檢查連接池內(nèi)連接對象狀態(tài),更好地保證連接池穩(wěn)定。當連接對象數(shù)量少于預(yù)定數(shù)量,向連接池內(nèi)添加新對象。遍歷每個對象,處于關(guān)閉狀態(tài),則釋放其所占內(nèi)存。如果處于空閑狀態(tài),通過其空閑時間來決定是否關(guān)閉。如果處于使用狀態(tài),通過其使用時間來選擇是否關(guān)閉。
4)事務(wù)處理。進行數(shù)據(jù)庫事務(wù)處理,需符合“All or Nothing”原則。連接對象復(fù)用時很難保證事務(wù)處理的原子性。這里采取給連接對象增加標識是否進行事務(wù)處理屬性。如果是則不允許復(fù)用。
5)并發(fā)處理。同一時刻可能會有多個線程訪問連接對象,JAVA中使用synchronized關(guān)鍵字可以保證多線程操作同步。
6)多連接池設(shè)計。某些系統(tǒng)需要多用戶連接多數(shù)據(jù)庫,就需要同時管理多個連接池。可以采用配置文件來配置和管理多個連接池。
本文在實現(xiàn)連接池時,主要包含兩部分:連接池類(CConnPool)、連接池管理類(CConnManager)。
連接池類主要提供創(chuàng)建連接池、獲取可用連接對象、回收連接對象、定時管理連接池、關(guān)閉連接池等接口。其主要屬性和方法為:
連接池管理類主要實現(xiàn)加載相應(yīng)JDBC驅(qū)動、加載配置文件、創(chuàng)建連接池、獲取與回收連接對象。其主要屬性和方法為:
連接池降低了內(nèi)存操作頻率,優(yōu)化了數(shù)據(jù)庫訪問接口,提高了系統(tǒng)性能。當然,對連接池進行優(yōu)化不僅有這些技術(shù),還需要考慮到對Statement和Resultset對象的優(yōu)化,有待于進一步研究。
[1]布雷恩·賴特著.JSP數(shù)據(jù)庫編程指南[M].趙明昌,譯.北京:希望電子出版社,2001.
[2]Maydene Fisher,等.JDBC API Tutorial andReference,3rd Edition[M].Addison Wesley,2003.