Java中连接池
最近在看書,其中有一段是:
相信有大佬已經能看得出來這是《企業IT架構轉型之道》這本書了(這是一本不錯的書,推薦工作時長>2年的軟件人員可以看看)~~
對于紅色框內的那段文字,我有兩個概念不是很明白:
1、應用實例指的是什么?
2、連接池是什么?在什么時候發揮作用?以及什么時候被配置上?
帶著疑問,我查閱了大量的資料,也問了大神,大概弄清楚了。
應用實例
應用實例指的是一個應用需要連接數據庫的后臺(如淘寶后臺就是一個應用實例)。
連接池
說到Java中的連接池,我們不可避免的要說到數據庫連接池(connection pool),Java連接池就是數據庫連接池在Java上的應用。
大家都知道,對于資源共享,有一個很有名的設計模式-資源池(Resource Pool)。網絡上對于資源池的解釋是這樣的:
?簡言之,連接池是將已經創建好的連接保存在池中,當檢測到有請求時,直接使用創建好的連接對數據庫進行訪問,這樣可以節省創建連接和銷毀連接所帶來的的時間成本。
在數據庫連接池中,涉及到三個主要的參數:
- 最大維持連接數:沒有任何請求時在連接池中可以存在的連接數
- 最大連接數:連接池中最多可以存在的連接個數。
- 最大等待時間:當斷開連接時,超過最大維持連接數的連接不會馬上銷毀,最大等待時間過后它才會銷毀。
參數使用的場景實例如下:
當最大維持連接數是10,最大連接數是20,最大等待時間是10000(毫秒)時,訪問數據庫,調用連接池的過程是:最開始在連接池中有10個連接(最大連接數),當有用戶申請連接時,其將一個連接分配用戶,直到連接池中的10個連接全都分配出去。當第11個用戶申請連接時,它將創建第11個連接并分配給該用戶,直到把第20個連接(最大連接數)分配給第20個用戶。
當第21個用戶申請連接時,它需要等待,直到前面的20個用戶中某一個斷開了連接,才會把那個連接分配給第21個用戶,當用戶斷開連接時(第11至20個連接),該連接不會立刻被釋放而是需要等待10000毫秒(最大等待時間),才被釋放,當沒有用戶連接時,連接池內還保持10個連接。
至此,數據庫連接池是什么以及在什么時候發揮作用基本很清楚了?,F在來討論下他怎么被配置。
在應用的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連接池)
?
轉載于:https://www.cnblogs.com/lilala-world/p/11156771.html
總結
- 上一篇: 大家口中所说的A站、B站、C站、D站、E
- 下一篇: vi 文本编辑