Java中鏈接池

最近在看書,其中有一段是:html

相信有大佬已經能看得出來這是《企業IT架構轉型之道》這本書了(這是一本不錯的書,推薦工做時長>2年的軟件人員能夠看看)~~java

對於紅色框內的那段文字,我有兩個概念不是很明白:mysql

一、應用實例指的是什麼?sql

二、鏈接池是什麼?在何時發揮做用?以及何時被配置上?數據庫

帶着疑問,我查閱了大量的資料,也問了大神,大概弄清楚了。設計模式

應用實例

應用實例指的是一個應用須要鏈接數據庫的後臺(如淘寶後臺就是一個應用實例)。tomcat

鏈接池

說到Java中的鏈接池,咱們不可避免的要說到數據庫鏈接池(connection pool),Java鏈接池就是數據庫鏈接池在Java上的應用。網絡

你們都知道,對於資源共享,有一個頗有名的設計模式-資源池(Resource Pool)。網絡上對於資源池的解釋是這樣的:架構

 簡言之,鏈接池是將已經建立好的鏈接保存在池中,當檢測到有請求時,直接使用建立好的鏈接對數據庫進行訪問,這樣能夠節省建立鏈接和銷燬鏈接所帶來的的時間成本。eclipse

在數據庫鏈接池中,涉及到三個主要的參數:

- 最大維持鏈接數:沒有任何請求時在鏈接池中能夠存在的鏈接數

- 最大鏈接數:鏈接池中最多能夠存在的鏈接個數。

- 最大等待時間:當斷開鏈接時,超過最大維持鏈接數的鏈接不會立刻銷燬,最大等待時間事後它纔會銷燬。

參數使用的場景實例以下:

當最大維持鏈接數是10,最大鏈接數是20,最大等待時間是10000(毫秒)時,
訪問數據庫,調用鏈接池的過程是:最開始在鏈接池中有10個鏈接(最大鏈接數),當有用戶申請鏈接時,其將一個鏈接分配用戶,直到鏈接池中的10個鏈接全都分配出去。當第11個用戶申請鏈接時,它將建立第11個鏈接並分配給該用戶,直到把第20個鏈接(最大鏈接數)分配給第20個用戶。
當第21個用戶申請鏈接時,它須要等待,直到前面的20個用戶中某一個斷開了鏈接,纔會把那個鏈接分配給第21個用戶,當用戶斷開鏈接時(第11至20個鏈接),該鏈接不會馬上被釋放而是須要等待10000毫秒(最大等待時間),才被釋放,當沒有用戶鏈接時,鏈接池內還保持10個鏈接。

至此,數據庫鏈接池是什麼以及在何時發揮做用基本很清楚了。如今來討論下他怎麼被配置。

在應用的META-INF文件夾下建立一個context.xml配置文件,並在其中添加<Context>標籤進行配置,但,這種方式生成的數據源只能用於當前應用。

<?xml version="1.0" encoding="utf-8" ?>  
<Context>  
<Resource name="jdbc/EmployeeDB" 當前建立數據鏈接池的名字,本身定義,在使用jndi容器獲取該數據源對象時會用到  
            auth="Container" 做者  
            type="javax.sql.DataSource" 對象類型這裏固定爲DataSource便可  
            username="dbusername" 數據庫鏈接的用戶名  
            password="dbpassword" 鏈接密碼  
            driverClassName="com.mysql.jdbc.Driver" 驅動  
            url="jdbc:mysql:///dbcptest" 數據庫的url  
            maxActive="8"  DBCP的參數,DBCP的其餘參數能夠加入  
            maxIdle="4"/>  
</Context>  

在tomcat啓動時,會逐個加載其中的應用,當其加載到當前應用時,會加載到 META-INF文件夾下的 context.xml 配置文件,此時tomcat會根據其中的配置信息爲當前應用建立一個數據庫鏈接池,該數據庫鏈接池只能用於當前應用,tomcat下的其餘應用沒法使用該數據庫鏈接池。

附加:雖然數據庫鏈接池能夠幫助咱們節省大量的時間成本,但在開發中,使用鏈接池時若沒有關閉鏈接(調用鏈接的close方法)會出現「鏈接池疲勞的錯誤」。

擴展閱讀

- Java 中幾種主流的數據庫鏈接池

- 三種數據庫鏈接池的配置及使用(For JDBC)

- TomCat 源碼分析-線程池應用

- 詳解TomCat的鏈接數與線程池

鏈接池含義、做用和工做過程(四個流行的Java鏈接池)

相關文章
相關標籤/搜索