版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
12數(shù)據(jù)庫連接池第章本章目標(biāo)數(shù)據(jù)連接池原理DBCP、C3P0連接池配置使用使用數(shù)據(jù)庫連接池重構(gòu)《我學(xué)我會(huì)訂餐系統(tǒng)》回憶數(shù)據(jù)庫直接連接JDBC可做三件事:與數(shù)據(jù)庫建立連接、執(zhí)行SQL語句、處理結(jié)果ConnectionDriverManagerStatementResultSet
DriverManager:依據(jù)數(shù)據(jù)庫的不同,管理JDBC驅(qū)動(dòng)
Connection:負(fù)責(zé)連接數(shù)據(jù)庫并擔(dān)任傳送數(shù)據(jù)的任務(wù)
Statement:由Connection產(chǎn)生、負(fù)責(zé)執(zhí)行SQL語句
ResultSet:負(fù)責(zé)保存Statement執(zhí)行后所產(chǎn)生的查詢結(jié)果客戶端數(shù)據(jù)庫服務(wù)器1234使用數(shù)據(jù)直接連接的缺點(diǎn)在某一時(shí)刻連接必須效勞于一個(gè)用戶,以免造成事務(wù)沖突來自不同用戶的請(qǐng)求〔都使用了同一個(gè)連接〕對(duì)相同的事務(wù)進(jìn)行操作,如果一個(gè)請(qǐng)求試圖回滾,那么所有使用相同連接的數(shù)據(jù)庫操作都要被回滾。創(chuàng)立連接需要消耗時(shí)間創(chuàng)立一個(gè)連接大概需要1-2秒的時(shí)間。保持連接翻開狀態(tài)的代價(jià)很大尤其是在系統(tǒng)資源〔例如內(nèi)存〕方面。數(shù)據(jù)庫產(chǎn)品的許可證都按照同時(shí)翻開的連接數(shù)目來收費(fèi)。數(shù)據(jù)庫連接池原理什么是數(shù)據(jù)庫連接池?cái)?shù)據(jù)庫連接池:Connectionpooling,它是程序啟動(dòng)時(shí)建立足夠的數(shù)據(jù)庫連接,并將這些連接組成一個(gè)連接池,由程序動(dòng)態(tài)地對(duì)池中的連接進(jìn)行申請(qǐng),使用,釋放。數(shù)據(jù)庫連接池原理數(shù)據(jù)庫連接池運(yùn)行機(jī)制從連接池獲取或創(chuàng)立可用連接;使用完畢之后,把連接返還給連接池;在系統(tǒng)關(guān)閉前,斷開所有連接并釋放連接占用的系統(tǒng)資源;還能夠處理無效連接〔原來登記為可用的連接,由于某種原因不再可用,如超時(shí),通訊問題〕,并能夠限制連接池中的連接總數(shù)不低于某個(gè)預(yù)定值和不超過某個(gè)預(yù)定值;數(shù)據(jù)庫連接池原理連接池例如圖:數(shù)據(jù)庫連接池原理使用數(shù)據(jù)庫連接池技術(shù)的好處 1.資源重用
由于數(shù)據(jù)庫連接得到重用,防止了頻繁創(chuàng)立、釋放連接引起的大量性能開銷。在減少系統(tǒng)消耗的根底上,另一方面也增進(jìn)了系統(tǒng)運(yùn)行環(huán)境的平穩(wěn)性〔減少內(nèi)存碎片以及數(shù)據(jù)庫臨時(shí)進(jìn)程/線程的數(shù)量〕。
2.更快的系統(tǒng)響應(yīng)速度
數(shù)據(jù)庫連接池在初始化過程中,往往已經(jīng)創(chuàng)立了假設(shè)干數(shù)據(jù)庫連接置于池中備用。此時(shí)連接的初始化工作均已完成。對(duì)于業(yè)務(wù)請(qǐng)求處理而言,直接利用現(xiàn)有可用連接,防止了數(shù)據(jù)庫連接初始化和釋放過程的時(shí)間開銷,從而縮減了系統(tǒng)整體響應(yīng)時(shí)間。
3.統(tǒng)一的連接管理,防止數(shù)據(jù)庫連接泄漏
在較為完備的數(shù)據(jù)庫連接池實(shí)現(xiàn)中,可根據(jù)預(yù)先的連接占用超時(shí)設(shè)定,強(qiáng)制收回被占用連接。從而防止了常規(guī)數(shù)據(jù)庫連接操作中可能出現(xiàn)的資源泄漏。數(shù)據(jù)庫連接池原理常用的數(shù)據(jù)庫連接池基于JNDI、C3P0、DBCP技術(shù)的數(shù)據(jù)連接池DBCP的使用DBCP連接池是Apache軟件基金組織下的一個(gè)開源連接池實(shí)現(xiàn)。編寫DBCP測(cè)試類,DBCP主要接口與類。DBCP配置類:;數(shù)據(jù)庫連接工廠接口:;默認(rèn)數(shù)據(jù)庫連接工廠:;DBCP的使用DBCP主要配置屬性:見中文配置文檔。DBCP性能測(cè)試:100W次查詢時(shí)間。C3P0使用C3PO連接池是一個(gè)優(yōu)秀的連接池,推薦使用。C3PO實(shí)現(xiàn)了JDBC3.0標(biāo)準(zhǔn)的局部功能,因而性能更加突出。編寫c3p0測(cè)試類,其主要接口有:配置接口:C3P0使用C3p0主要配置屬性:見中文文檔C3p0性能測(cè)試:100W次查詢時(shí)間。使用連接池優(yōu)化系統(tǒng)創(chuàng)立數(shù)據(jù)庫,創(chuàng)立表users。Users表有三個(gè)字段,id,name,pwd使用連接池優(yōu)化系統(tǒng)1、編寫數(shù)據(jù)庫連接層。一、創(chuàng)立DB包,創(chuàng)立DBUtil類。二、創(chuàng)立靜態(tài)方法getConn(),靜態(tài)方法close()。用于連接關(guān)閉數(shù)據(jù)源。例如代碼public
classDBCPTest{
private
staticBasicDataSourcebds=null;
private
staticConnectionFactorycf=null;
static{
bds=newBasicDataSource();
bds.setDriverClassName(");
bds.setUrl("jdbc:sqlserver://127.0.0.1:1433;databaseName=AjaxDb");
bds.setInitialSize(10);
bds.setMaxActive(4);
bds.setMaxWait(5000);
bds.setUsername("sa");
bds.setPassword("Zzx198461");
cf=newDataSourceConnectionFactory(bds);}
public
staticConnectiongetConnection()throwsSQLException{
return
cf.createConnection();}
public
static
voiddestroy()throwsSQLException{
cf=null;
bds.close();
bds=null;}
public
static
voidmain(String[]args)throwsException{System.out.println(DBCPTest.getConnection());}}配置TomcateJNDI數(shù)據(jù)庫連接池1第一步:加載數(shù)據(jù)驅(qū)動(dòng)包。Tomcate5.5將數(shù)據(jù)庫驅(qū)動(dòng)包拷貝到tomcathome/common/lib目錄下。Tomcate6.0將數(shù)據(jù)庫驅(qū)動(dòng)包拷貝到tomcathome/lib目錄下。配置TomcateJNDI數(shù)據(jù)庫連接池2第二步:配置tomcate連接池文件。A>在web工程中的META-INF創(chuàng)立context.xml文件在文件中寫入內(nèi)容:<?xmlversion="1.0"encoding="UTF-8"?><Context><Resourcename=“JNDI名"auth="Container"type=“〞username=“用戶名〞password=“密碼"driverClassName=“驅(qū)動(dòng)類"url=“數(shù)據(jù)連接字符串"maxActive="8"maxIdle="4"/></Context>配置TomcateJNDI數(shù)據(jù)庫連接池3第三步:在web.xml配置如下:<!–聲名工程所需資源-->
<resource-ref> <!–JDNI資源名
--> <res-ref-name>connpool</res-ref-name> <!–資源類型
--> <res-type></res-type> <!–資源范圍
--> <res-auth>Container</res-auth></resource-ref>配置TomcateJNDI數(shù)據(jù)庫連接池4第四步:修改DBUtil類。publicclassDBUtil{ privateDBUtil(){ }
publicstaticConnectiongetConn()throwsException{ ContextinitCtx=newInitialContext(); ContextenvCtx=(Context)initCtx.lookup("java:comp/env"); DataSourceds=(DataSource) envCtx.lookup("connpool"); returnds.getConnection(); }}使用連接池優(yōu)化系統(tǒng)編寫bean層創(chuàng)立bean包編寫users類,屬性與順序與表一至。使用連接池優(yōu)化系統(tǒng)編寫dao層創(chuàng)立Dao包。創(chuàng)立UsersDao類。創(chuàng)立login方法使用連接池優(yōu)化系統(tǒng)編寫頁面顯示編寫LoginServlet.java,用于處理登錄請(qǐng)求。如果登錄失敗,提示用戶錯(cuò)誤信息。如果登錄成功,進(jìn)行商品顯示(show.jsp)頁面。jndi與tomcat連接池
私有數(shù)據(jù)庫連接池〔Host節(jié)點(diǎn)里面〕<Contextpath="/YouWeb"docBase="F:\workspace\tea_forum\WebRoot">
<Resourcename="jdbc/sqlserver"type="javax.sql.DataSource"driverClassName="sun.jdbc.odbc.JdbcOdbcDriver"
maxIdle="2"maxWait="5000"username="sa"password="sa"url="jdbc:odbc:accp"maxActive="4"/></Context>jndi與tomcat連接池
公有數(shù)據(jù)庫連接池<Resource
name="jdbc/mssql"
type="javax.sql.DataSource"
driverClassName="sun.jdbc.odbc.JdbcOdbcDriver"
maxIdle="2"
maxWait="5000"
username="sa"
password="sa"
url="jdbc:odbc:accp"
maxActive="4"/>jndi與tomcat連接池
引用公有數(shù)據(jù)庫連接池〔Host節(jié)點(diǎn)里面〕<Contextpath="/testjndi1"docBase="F:\workspace\testpool\WebRoot"><ResourceLinkname="jdbc/mssql1"global="jdbc/mssql"type="javax.sql.DataSource"/></Context><Contextpath="/testjndi2"docBase="F:\workspace\testpool2\WebRoot"><ResourceLinkname="jdbc/sqlserver2"global="jdbc/mssql"type="javax.sql.DataSource"/></Context>jndi與tomcat連接池
工程工程目錄WEB-INf\web.xml中配置<!--注意:res-ref-name節(jié)點(diǎn)里的名字要與上面的Resource節(jié)點(diǎn)里的name要一致。名字可以任意取,但一定要一致。-->
<resource-ref>
<res-ref-name>jdbc/sqlserver</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>jndi與tomcat連接池
JSP測(cè)試文件
….<%try{
ContextinitCtx=newInitialContext();
ContextenvCtx=(Context)initCtx.lookup("java:comp/env");
DataSourceds=(DataSource)envCtx.lookup("jdbc/sqlserver");Connectionconn=ds.getConnection();
Statementstmt=conn.createStatement();
ResultSetrs=stmt.executeQuery("select*fromtest");
while(rs.next()){%>
<br>
<%=rs.getString(1)%>
<%}%>
<%out.print("<br>Successful!成功?。n");%>
<%rs.close();
stmt.close();
conn.close();
}catch(Exceptione){
out.print("出現(xiàn)例外!"+e.getMessage());
e.printStackTrace();
}….jndi與tomcat連接池
配置數(shù)據(jù)源的簡(jiǎn)單方法
1)tomcat6.0后提供了context.xml,無需設(shè)置虛擬目錄和配置web.xml。將配置
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年龍崗區(qū)稅務(wù)局飲用水安全風(fēng)險(xiǎn)評(píng)估與整改服務(wù)協(xié)議4篇
- 2025版鋁材行業(yè)培訓(xùn)與咨詢服務(wù)合同范本
- 2025年度高新技術(shù)企業(yè)研發(fā)項(xiàng)目成果轉(zhuǎn)化與技術(shù)支持協(xié)議下載2篇
- 2025年度內(nèi)部控制合同管理內(nèi)部控制手冊(cè)3篇
- 二零二五版羅絲與吳磊的離婚協(xié)議及子女撫養(yǎng)權(quán)轉(zhuǎn)讓協(xié)議4篇
- 二零二五年度廚師技能競(jìng)賽與評(píng)選活動(dòng)合同4篇
- 二零二五版特色小鎮(zhèn)物業(yè)合同財(cái)務(wù)管理與文化旅游融合協(xié)議3篇
- 二零二五版汽車維修店面使用權(quán)轉(zhuǎn)讓合同模板3篇
- 2025年度新能源產(chǎn)業(yè)合作推廣戰(zhàn)略框架協(xié)議書
- 二零二五年度LED燈具音響設(shè)備研發(fā)生產(chǎn)合作協(xié)議4篇
- 華為HCIA-Storage H13-629考試練習(xí)題
- Q∕GDW 516-2010 500kV~1000kV 輸電線路劣化懸式絕緣子檢測(cè)規(guī)程
- 遼寧省撫順五十中學(xué)2024屆中考化學(xué)全真模擬試卷含解析
- 2024年湖南汽車工程職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫及答案解析
- 家長(zhǎng)心理健康教育知識(shí)講座
- GB/T 292-2023滾動(dòng)軸承角接觸球軸承外形尺寸
- 軍人結(jié)婚函調(diào)報(bào)告表
- 民用無人駕駛航空器實(shí)名制登記管理規(guī)定
- 北京地鐵6號(hào)線
- 航空油料計(jì)量統(tǒng)計(jì)員(初級(jí))理論考試復(fù)習(xí)題庫大全-上(單選題匯總)
評(píng)論
0/150
提交評(píng)論