DBCP連接池簡介 1、資料庫連接基礎 資料庫連接池基礎主要包括以下三個方面的內容:資料庫連接池的基本概念、資料庫連接池的工作原理、Java開源的連接池。下麵將從這三個方面一一介紹: (1)資料庫連接池的基本概念 資料庫連接是一種關鍵的、有限的、昂貴的資源,這一點在多用戶的Web應用程式中體現得尤為 ...
DBCP連接池簡介
1、資料庫連接基礎
資料庫連接池基礎主要包括以下三個方面的內容:資料庫連接池的基本概念、資料庫連接池的工作原理、Java開源的連接池。下麵將從這三個方面一一介紹:
(1)資料庫連接池的基本概念
資料庫連接是一種關鍵的、有限的、昂貴的資源,這一點在多用戶的Web應用程式中體現得尤為突出。對資料庫連接的管理能顯著影響到整個應用程式的伸縮性和健壯性,影響到程式的性能指標。因此,資料庫連接池正是針對這個問題提出來的。
資料庫連接池負責分配、管理和釋放資料庫連接,它允許應用程式重覆使用一個現有的資料庫連接,而不再是重新建立一個資料庫連接;釋放空閑時間超過最大空閑時間的資料庫連接,以避免因為沒有釋放資料庫連接而引起的資料庫連接遺漏。
資料庫連接池在初始化時將創建一定數量的資料庫連接放到連接池中,這些資料庫連接的數量是由最小資料庫連接數來設定的。無論這些資料庫連接是否被使用,連接池都將一直保持至少擁有這麼多的連接數量。連接池的最大資料庫連接數量限定了這個連接池能占有的最大連接數,當應用程式向連接池請求的連接數超過最大連接數時,這些請求將被加入到等待隊列中。
(2)資料庫連接池的工作原理
下麵請看一個具體的資料庫連接池工作原理示意圖:
圖中所示的是一個Web應用申請連接,實際上是從連接池裡取得一個連接,使用完連接後又返回到該連接池容器中。
(3)Java開源的連接池
由於Java的開源特性,產生了許多Java開源的連接池。例如以下資料庫連接池:Jakarta DBCP、C3P0、Proxool、DBPool等。
其中,Jakarta DBCP具體是:一個依賴Jakarta commons-pool對象池的資料庫連接池,DBCP可以直接第在應用程式中使用。這也是本文所要介紹的技術要點。
C3P0具體是:一個開放源代碼的JDBC連接池,它在lib目錄中與Hibernate一起發佈,包括了實現jdbc3和jdbc2擴展規範說明的Connection池和Statement池的DataSources對象。
此處就簡單說明一下一上兩個連接池,其他連接池此處就不說明瞭(⊙o⊙)哦。
2、DBCP連接池基礎簡介
DBCP是Java開源連接池中最常用的一種,它一般應用在資料庫使用非常頻繁的系統中,可以處理資料庫連接的大量請求,是做大型站點的首選資料庫配置。
在DBCP創建的過程中,它也遵循普通連接池的創建機制。例如使用Struts框架開發時,如果在struts-config.xml中配置了DBCP組件,則在Struts啟動時就會創建DBCP連接池。
3、Struts框架中配置DBCP連接池示例
以下是使用Struts框架時,其中struts-config.xml文件中配置DBCP組件的示例代碼:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
"http://struts.apache.org/dtds/struts-config_1_2.dtd"> <struts-config> <!-- 配置數據源 --> <data-sources> <data-source type="org.apache.commons.dbcp.BasicDataSource"> <set-property property="driverClassName" value="com.mysql.jdbc.Driver" /> <set-property property="url" value="jdbc:mysql://localhost:3306/demo" /> <set-property property="username" value="root" /> <set-property property="password" value="" /> <set-property property="maxActive" value="10" /> <set-property property="maxWait" value="5000" /> <set-property property="defaultAutoCommit" value="false" /> <set-property property="defaultReadOnly" value="false" /> <set-property property="validationQuery" value="SELECT COUNT(*) FROM user" /> </data-source> </data-sources> </struts-config>