對(duì)Java初學(xué)者來說,數(shù)據(jù)庫連接池同其它的XX池一樣,看起來是很神秘的一種技術(shù),其實(shí)都是難者不會(huì),會(huì)者不難的情況。當(dāng)了解了數(shù)據(jù)庫連接池技術(shù)之后,數(shù)據(jù)庫連接池并不神秘而是一個(gè)非常簡(jiǎn)單的小技巧。
為什么會(huì)有數(shù)據(jù)庫連接池呢?對(duì)于一個(gè)系統(tǒng)來說,如果沒有數(shù)據(jù)庫連接,當(dāng)你每次需要進(jìn)行數(shù)據(jù)庫操作時(shí),都要獲取連接,完成操作之后將連接關(guān)閉。當(dāng)系統(tǒng)訪問量上來之后,你就會(huì)發(fā)現(xiàn)系統(tǒng)將會(huì)有大量的實(shí)踐都花在獲取數(shù)據(jù)庫連接和關(guān)閉連接上。因此如果我們建立一個(gè)數(shù)據(jù)庫連接池,在系統(tǒng)啟動(dòng)時(shí),一次性的獲取若干條數(shù)據(jù)庫連接加入到連接池中,當(dāng)我們需要進(jìn)行數(shù)據(jù)庫操作時(shí),直接從數(shù)據(jù)庫連接池中拿到連接,用完之后不再關(guān)閉,而是將其放入連接池中,這樣系統(tǒng)運(yùn)行時(shí)將再不會(huì)有頻繁的獲取連接和關(guān)閉連接了。下面,我們就自己寫一個(gè)簡(jiǎn)單的數(shù)據(jù)庫連接池,并加以測(cè)試。 1. ConnectionPool類:數(shù)據(jù)庫連接池類. 運(yùn)用單例模式,當(dāng)要進(jìn)行數(shù)據(jù)庫操作時(shí),先調(diào)用ConnectionPool.getInstance()方法,獲取數(shù)據(jù)庫連接池的實(shí)例,然后調(diào)用connectionPool.getConnection()方法獲取數(shù)據(jù)庫連接,使用完連接之后調(diào)用connectionPool.release(Connection conn)來代替connection.close()方法來將獲得的連接釋放到連接池中,以便重復(fù)利用。這樣就解決了頻繁打開和關(guān)閉數(shù)據(jù)庫連接池的問題。 ConnectionPool.java Java代碼
2. jdbc.propeties 數(shù)據(jù)庫連接池配置文件,初始化數(shù)據(jù)庫連接池時(shí)使用到。 Xml代碼
3. ConnectionPoolTest類: 測(cè)試類, 通過與不使用數(shù)據(jù)庫連接池進(jìn)行數(shù)據(jù)庫訪問所消耗的時(shí)間進(jìn)行對(duì)比,為了使測(cè)試盡可能準(zhǔn)確,通過100次循環(huán)調(diào)用,對(duì)比時(shí)間總和。 ConnectionPoolTest.java Java代碼
通過測(cè)試結(jié)果可以發(fā)現(xiàn),使用數(shù)據(jù)庫連接池所消耗的實(shí)踐要小于不使用數(shù)據(jù)庫連接池的,當(dāng)調(diào)用的次數(shù)增加時(shí),差異將會(huì)更加明顯。 當(dāng)然這個(gè)數(shù)據(jù)庫連接池僅僅是用來了解數(shù)據(jù)庫連接池的原理而已,對(duì)于超時(shí)的連接并沒有強(qiáng)制收回的機(jī)制,也沒有限制用戶調(diào)用close方法來關(guān)閉連接。僅供學(xué)習(xí)。。。。 |
|