java數(shù)據(jù)庫(kù)連接池 dbcp 的用法
需要下commons-dbcp commons-pool 這兩個(gè)jar包
import org.apache.commons.dbcp.BasicDataSource; |
接下來(lái),在我們的應(yīng)用中,只要簡(jiǎn)單地使用ConnectionSource.getConnection()就可以取得連接池中的數(shù)據(jù)庫(kù)連接,享受數(shù)據(jù)庫(kù)連接帶給我們的好處了。當(dāng)我們使用完取得的數(shù)據(jù)庫(kù)連接后,只要簡(jiǎn)單地使用connection.close()就可把此連接返回到連接池中,至于為什么不是直接關(guān)閉此連接,而是返回給連接池,這是因?yàn)閐bcp使用委派模型來(lái)實(shí)現(xiàn)Connection接口了。
在使用Properties來(lái)創(chuàng)建BasicDataSource時(shí),有很多參數(shù)可以設(shè)置,比較重要的還有:
testOnBorrow、testOnReturn、testWhileIdle,他們的意思是當(dāng)是取得連接、返回連接或連接空閑時(shí)是否進(jìn)行有效性驗(yàn)證(即是否還和數(shù)據(jù)庫(kù)連通的),默認(rèn)都為false。所以當(dāng)數(shù)據(jù)庫(kù)連接因?yàn)槟撤N原因斷掉后,再?gòu)倪B接池中取得的連接,實(shí)際上可能是無(wú)效的連接了,所以,為了確保取得的連接是有效的, 可以把把這些屬性設(shè)為true。當(dāng)進(jìn)行校驗(yàn)時(shí),需要另一個(gè)參數(shù):validationQuery,對(duì)oracle來(lái)說(shuō),可以是:SELECT COUNT(*) FROM DUAL,實(shí)際上就是個(gè)簡(jiǎn)單的SQL語(yǔ)句,驗(yàn)證時(shí),就是把這個(gè)SQL語(yǔ)句在數(shù)據(jù)庫(kù)上跑一下而已,如果連接正常的,當(dāng)然就有結(jié)果返回了。
還有2個(gè)參數(shù):timeBetweenEvictionRunsMillis 和 minEvictableIdleTimeMillis, 他們兩個(gè)配合,可以持續(xù)更新連接池中的連接對(duì)象,當(dāng)timeBetweenEvictionRunsMillis 大于0時(shí),每過(guò)timeBetweenEvictionRunsMillis 時(shí)間,就會(huì)啟動(dòng)一個(gè)線程,校驗(yàn)連接池中閑置時(shí)間超過(guò)minEvictableIdleTimeMillis的連接對(duì)象。
posted on 2013-09-24 10:18 順其自然EVO 閱讀(385) 評(píng)論(0) 編輯 收藏 所屬分類(lèi): 數(shù)據(jù)庫(kù)