用戶(hù)每次請(qǐng)求都需要向數(shù)據(jù)庫(kù)獲得鏈接,而數(shù)據(jù)庫(kù)創(chuàng)建連接通常需要消耗相對(duì)較大的資源,創(chuàng)建時(shí)間也 較長(zhǎng)。假設(shè)網(wǎng)站一天10萬(wàn)訪問(wèn)量,數(shù)據(jù)庫(kù)服務(wù)器就需要?jiǎng)?chuàng)建10萬(wàn)次連接,極大的浪費(fèi)數(shù)據(jù)庫(kù)的資源,并 且極易造成數(shù)據(jù)庫(kù)服務(wù)器內(nèi)存溢出、拓機(jī)。
創(chuàng)新互聯(lián)建站致力于互聯(lián)網(wǎng)品牌建設(shè)與網(wǎng)絡(luò)營(yíng)銷(xiāo),包括成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、SEO優(yōu)化、網(wǎng)絡(luò)推廣、整站優(yōu)化營(yíng)銷(xiāo)策劃推廣、電子商務(wù)、移動(dòng)互聯(lián)網(wǎng)營(yíng)銷(xiāo)等。創(chuàng)新互聯(lián)建站為不同類(lèi)型的客戶(hù)提供良好的互聯(lián)網(wǎng)應(yīng)用定制及解決方案,創(chuàng)新互聯(lián)建站核心團(tuán)隊(duì)10多年專(zhuān)注互聯(lián)網(wǎng)開(kāi)發(fā),積累了豐富的網(wǎng)站經(jīng)驗(yàn),為廣大企業(yè)客戶(hù)提供一站式企業(yè)網(wǎng)站建設(shè)服務(wù),在網(wǎng)站建設(shè)行業(yè)內(nèi)樹(shù)立了良好口碑。
數(shù)據(jù)庫(kù)連接池的基本概念
數(shù)據(jù)庫(kù)連接是一種關(guān)鍵的有限的昂貴的資源,這一點(diǎn)在多用戶(hù)的網(wǎng)頁(yè)應(yīng)用程序中體現(xiàn)的尤為突出.對(duì)數(shù)據(jù)庫(kù) 連接的管理能顯著影響到整個(gè)應(yīng)用程序的伸縮性和健壯性,影響到程序的性能指標(biāo).數(shù)據(jù)庫(kù)連接池正式針對(duì) 這個(gè)問(wèn)題提出來(lái)的.數(shù)據(jù)庫(kù)連接池負(fù)責(zé)分配,管理和釋放數(shù)據(jù)庫(kù)連接,它允許應(yīng)用程序重復(fù)使用一個(gè)現(xiàn)有的 數(shù)據(jù)庫(kù)連接,而不是重新建立一個(gè)。
數(shù)據(jù)庫(kù)連接池在初始化時(shí)將創(chuàng)建一定數(shù)量的數(shù)據(jù)庫(kù)連接放到連接池中, 這些數(shù)據(jù)庫(kù)連接的數(shù)量是由最小數(shù) 據(jù)庫(kù)連接數(shù)來(lái)設(shè)定的.無(wú)論這些數(shù)據(jù)庫(kù)連接是否被使用,連接池都將一直保證至少擁有這么多的連接數(shù)量. 連接池的最大數(shù)據(jù)庫(kù)連接數(shù)量限定了這個(gè)連接池能占有的最大連接數(shù),當(dāng)應(yīng)用程序向連接池請(qǐng)求的連接數(shù) 超過(guò)最大連接數(shù)量時(shí),這些請(qǐng)求將被加入到等待隊(duì)列中.
數(shù)據(jù)庫(kù)連接池的最小連接數(shù)和最大連接數(shù)的設(shè)置要考慮到以下幾個(gè)因素:
編寫(xiě)連接池需實(shí)現(xiàn)java.sql.DataSource接口。
開(kāi)源數(shù)據(jù)庫(kù)連接池
現(xiàn)在很多WEB服務(wù)器(Weblogic, WebSphere, Tomcat)都提供了DataSoruce的實(shí)現(xiàn),即連接池的實(shí)現(xiàn)。 通常我們把DataSource的實(shí)現(xiàn),按其英文含義稱(chēng)之為數(shù)據(jù)源,數(shù)據(jù)源中都包含了數(shù)據(jù)庫(kù)連接池的實(shí) 現(xiàn)。
也有一些開(kāi)源組織提供了數(shù)據(jù)源的獨(dú)立實(shí)現(xiàn):
在使用了數(shù)據(jù)庫(kù)連接池之后,在項(xiàng)目的實(shí)際開(kāi)發(fā)中就不需要編寫(xiě)連接數(shù)據(jù)庫(kù)的代碼了,直接從數(shù)據(jù)源獲 得數(shù)據(jù)庫(kù)的連接。
DBCP數(shù)據(jù)源
DBCP 是 Apache 軟件基金組織下的開(kāi)源連接池實(shí)現(xiàn),要使用DBCP數(shù)據(jù)源,需要應(yīng)用程序應(yīng)在系統(tǒng)中增 加如下兩個(gè) jar 文件:
Tomcat 的連接池正是采用該連接池來(lái)實(shí)現(xiàn)的。該數(shù)據(jù)庫(kù)連接池既可以與應(yīng)用服務(wù)器整合使用,也可由 應(yīng)用程序獨(dú)立使用。
測(cè)試:
1、導(dǎo)入相關(guān)jar包
2、在類(lèi)目錄下加入dbcp的配置文件:dbcpconfig.properties
#連接設(shè)置 driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&characterEncoding=utf8&useSSL=false username=root password=123456 # initialSize=10 #最大連接數(shù)量 maxActive=50 # maxIdle=20 # minIdle=5 # maxWait=60000 #JDBC驅(qū)動(dòng)建立連接時(shí)附帶的連接屬性屬性的格式必須為這樣:【屬性名=property;】 #注意:"user" 與 "password" 兩個(gè)屬性會(huì)被明確地傳遞,因此這里不需要包含他們。 connectionProperties=useUnicode=true;characterEncoding=UTF8 #指定由連接池所創(chuàng)建的連接的自動(dòng)提交(auto-commit)狀態(tài)。 defaultAutoCommit=true #driver default 指定由連接池所創(chuàng)建的連接的只讀(read-only)狀態(tài)。 #如果沒(méi)有設(shè)置該值,則“setReadOnly”方法將不被調(diào)用。(某些驅(qū)動(dòng)并不支持只讀模式,如:Informix) defaultReadOnly= #driver default 指定由連接池所創(chuàng)建的連接的事務(wù)級(jí)別(TransactionIsolation)。 #可用值為下列之一:(詳情可見(jiàn)javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE defaultTransactionIsolation=READ_UNCOMMITTED