第12章-數(shù)據(jù)庫連接池_第1頁
第12章-數(shù)據(jù)庫連接池_第2頁
第12章-數(shù)據(jù)庫連接池_第3頁
第12章-數(shù)據(jù)庫連接池_第4頁
第12章-數(shù)據(jù)庫連接池_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論