《數(shù)據(jù)庫(kù)連接池》PPT課件.ppt
《《數(shù)據(jù)庫(kù)連接池》PPT課件.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《《數(shù)據(jù)庫(kù)連接池》PPT課件.ppt(36頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
,,,三,數(shù)據(jù)庫(kù)連接池,第,講,本章目標(biāo),數(shù)據(jù)連接池原理DBCP、C3P0,JNDI連接池配置使用,一、回顧數(shù)據(jù)庫(kù)直接連接,JDBC可做三件事:與數(shù)據(jù)庫(kù)建立連接、執(zhí)行SQL語(yǔ)句、處理結(jié)果,Connection,DriverManager,Statement,ResultSet,,DriverManager:依據(jù)數(shù)據(jù)庫(kù)的不同,管理JDBC驅(qū)動(dòng)Connection:負(fù)責(zé)連接數(shù)據(jù)庫(kù)并擔(dān)任傳送數(shù)據(jù)的任務(wù)Statement:由Connection產(chǎn)生、負(fù)責(zé)執(zhí)行SQL語(yǔ)句ResultSet:負(fù)責(zé)保存Statement執(zhí)行后所產(chǎn)生的查詢結(jié)果,客戶端,數(shù)據(jù)庫(kù)服務(wù)器,1,2,3,4,使用數(shù)據(jù)直接連接的缺點(diǎn),在某一時(shí)刻連接必須服務(wù)于一個(gè)用戶,以免造成事務(wù)沖突來(lái)自不同用戶的請(qǐng)求(都使用了同一個(gè)連接)對(duì)相同的事務(wù)進(jìn)行操作,如果一個(gè)請(qǐng)求試圖回滾,那么所有使用相同連接的數(shù)據(jù)庫(kù)操作都要被回滾。創(chuàng)建連接需要耗費(fèi)時(shí)間創(chuàng)建一個(gè)連接大概需要1-2秒的時(shí)間。保持連接打開(kāi)狀態(tài)的代價(jià)很大尤其是在系統(tǒng)資源(例如內(nèi)存)方面。數(shù)據(jù)庫(kù)產(chǎn)品的許可證都按照同時(shí)打開(kāi)的連接數(shù)目來(lái)收費(fèi)。,二、數(shù)據(jù)庫(kù)連接池原理,什么是數(shù)據(jù)庫(kù)連接池?cái)?shù)據(jù)庫(kù)連接池:Connectionpooling,它是程序啟動(dòng)時(shí)建立足夠的數(shù)據(jù)庫(kù)連接,并將這些連接組成一個(gè)連接池,由程序動(dòng)態(tài)地對(duì)池中的連接進(jìn)行申請(qǐng),使用,釋放。,二、數(shù)據(jù)庫(kù)連接池原理,數(shù)據(jù)庫(kù)連接池運(yùn)行機(jī)制從連接池獲取或創(chuàng)建可用連接;使用完畢之后,把連接返還給連接池;在系統(tǒng)關(guān)閉前,斷開(kāi)所有連接并釋放連接占用的系統(tǒng)資源;還能夠處理無(wú)效連接(原來(lái)登記為可用的連接,由于某種原因不再可用,如超時(shí),通訊問(wèn)題),并能夠限制連接池中的連接總數(shù)不低于某個(gè)預(yù)定值和不超過(guò)某個(gè)預(yù)定值;,二、數(shù)據(jù)庫(kù)連接池原理,連接池示例圖:,二、數(shù)據(jù)庫(kù)連接池原理,使用數(shù)據(jù)庫(kù)連接池技術(shù)的好處1.資源重用由于數(shù)據(jù)庫(kù)連接得到重用,避免了頻繁創(chuàng)建、釋放連接引起的大量性能開(kāi)銷。在減少系統(tǒng)消耗的基礎(chǔ)上,另一方面也增進(jìn)了系統(tǒng)運(yùn)行環(huán)境的平穩(wěn)性(減少內(nèi)存碎片以及數(shù)據(jù)庫(kù)臨時(shí)進(jìn)程/線程的數(shù)量)。2.更快的系統(tǒng)響應(yīng)速度數(shù)據(jù)庫(kù)連接池在初始化過(guò)程中,往往已經(jīng)創(chuàng)建了若干數(shù)據(jù)庫(kù)連接置于池中備用。此時(shí)連接的初始化工作均已完成。對(duì)于業(yè)務(wù)請(qǐng)求處理而言,直接利用現(xiàn)有可用連接,避免了數(shù)據(jù)庫(kù)連接初始化和釋放過(guò)程的時(shí)間開(kāi)銷,從而縮減了系統(tǒng)整體響應(yīng)時(shí)間。3.統(tǒng)一的連接管理,避免數(shù)據(jù)庫(kù)連接泄漏在較為完備的數(shù)據(jù)庫(kù)連接池實(shí)現(xiàn)中,可根據(jù)預(yù)先的連接占用超時(shí)設(shè)定,強(qiáng)制收回被占用連接。從而避免了常規(guī)數(shù)據(jù)庫(kù)連接操作中可能出現(xiàn)的資源泄漏。,二、數(shù)據(jù)庫(kù)連接池原理,常用的數(shù)據(jù)庫(kù)連接池基于JNDI、C3P0、DBCP技術(shù)的數(shù)據(jù)連接池(1)JNDI(JavaNamingandDirectoryInterface):是SUN公司提供的一種標(biāo)準(zhǔn)的Java命名系統(tǒng)接口,是一組在Java應(yīng)用中訪問(wèn)命名和目錄服務(wù)的API。命名服務(wù)是將名稱和對(duì)象聯(lián)系起來(lái),使得我們可以用名稱訪問(wèn)對(duì)象。目錄服務(wù)是一種命名服務(wù),它提供了應(yīng)用編程接口(applicationprogramminginterface,API)和服務(wù)提供者接口(serviceproviderinterface,SPI)。這一點(diǎn)的真正含義是,要讓應(yīng)用與命名服務(wù)或目錄服務(wù)交互,必須有這個(gè)服務(wù)的JNDI服務(wù)提供者,這正是JNDISPI發(fā)揮作用的地方。服務(wù)提供者基本上是一組類,這些類為各種具體的命名和目錄服務(wù)實(shí)現(xiàn)了JNDI接口—很象JDBC驅(qū)動(dòng)為各種具體的數(shù)據(jù)庫(kù)系統(tǒng)實(shí)現(xiàn)了JDBC接口一樣。作為一個(gè)應(yīng)用開(kāi)發(fā)者,不必操心JNDISPI。只需要確認(rèn)要使用的每一個(gè)命名或目錄服務(wù)都有服務(wù)提供者。(2)C3P0:連接池作者是《星球大戰(zhàn)》迷,C3P0就是其中的一個(gè)機(jī)器人,并且這個(gè)名稱中包涵connection和pool的單詞字母。因此叫這個(gè)名字。(3)DBCP(DataBaseconnectionpool):是apache上的一個(gè)java連接池項(xiàng)目,也是tomcat使用的連接池組件。單獨(dú)使用dbcp需要3個(gè)包:common-dbcp.jar,common-pool.jar,common-collections.jar,三、連接池的使用,DBCP主要配置屬性:下面對(duì)里面幾個(gè)比較重要的參數(shù)進(jìn)行一下說(shuō)明:name:表示你的連接池的名稱也就是你要訪問(wèn)連接池的地址type:是對(duì)象的類型driverClassName:是數(shù)據(jù)庫(kù)驅(qū)動(dòng)的名稱url:是數(shù)據(jù)庫(kù)的地址username:是登陸數(shù)據(jù)庫(kù)的用戶名password:是登陸數(shù)據(jù)庫(kù)的密碼factory:默認(rèn)的使用tomcat.dbcp.BasicDataSourceFactory,可以使用factory="mons.dbcp.BasicDataSourceFactory",就是Apache的開(kāi)源的數(shù)據(jù)庫(kù)連接池,但一定要把commons-dbcp-1.4.jar放到項(xiàng)目的lib里。,3.1DBCP使用,maxIdle,是最大的空閑連接數(shù),這里取值為2,表示即使沒(méi)有數(shù)據(jù)庫(kù)連接時(shí)依然可以保持2空閑的連接,而不被清除,隨時(shí)處于待命狀態(tài)。maxWait,最大建立連接等待時(shí)間。如果超過(guò)此時(shí)間將接到異常。設(shè)為-1表示無(wú)限制。maxActive是最大激活連接數(shù),這里取值為20,表示同時(shí)最多有20個(gè)數(shù)據(jù)庫(kù)連接。,三、連接池的使用,DBCP應(yīng)用(1)新建一個(gè)web工程(2)把數(shù)據(jù)庫(kù)包導(dǎo)入到lib如mysql-connector-java-5.0.8-bin(3)把common-dbcp.jar,common-pool.jar,common-collections.jar導(dǎo)入到lib(4)在WebRoot\META-INF建立文件context.xml內(nèi)容如下:,三、連接池的使用,(5)在jsp中使用數(shù)據(jù)庫(kù)連接池導(dǎo)入類包java.sql.*,mons.dbcp.*java.sql.SQLException.*javax.naming.Context.*javax.naming.InitialContextjavax.sql.DataSourcejavax.naming.NamingException,三、連接池的使用,(6)編寫代碼");out.print(dbs.getNumActive());}catch(NamingExceptione){e.printStackTrace();}catch(SQLExceptione){e.printStackTrace();}%>,三、連接池的使用,3.2C3P0使用,C3PO連接池是一個(gè)優(yōu)秀的連接池,推薦使用。C3PO實(shí)現(xiàn)了JDBC3.0規(guī)范的部分功能,因而性能更加突出。C3PO主要配置屬性,acquireIncrement:當(dāng)連接池中的連接耗盡的時(shí)候c3p0一次同時(shí)獲取的連接數(shù)acquireRetryAttempts:定義在從數(shù)據(jù)庫(kù)獲取新連接失敗后重復(fù)嘗試的次數(shù)acquireRetryDelay:兩次連接中間隔時(shí)間,單位毫秒。Default:1000autoCommitOnClose:連接關(guān)閉時(shí)默認(rèn)將所有未提交的操作回滾。Default:falseDescription:描述minPoolSize:連接池中最小連接數(shù)maxPoolSize:連接池中最大連接數(shù)Name:連接池的名字User:用戶名Password:密碼auth表示認(rèn)證方式,一般為Container,3.2C3P0使用,factory:工廠類的位置,生成數(shù)據(jù)源Type:連接池的類型jdbcUrl:數(shù)據(jù)庫(kù)地址,3.2C3P0使用,C3P0應(yīng)用(1)導(dǎo)入包到libc3p0-0.9.1.2.jar、mysql-connector-java-5.0.8-bin.jar(2)配置文件\Tomcat5.5\conf\server.xml在tomcat\conf\server.xml的GlobalNamingResources中增加:,3.2C3P0使用,(3)配置文件WebRoot\META-INF\context.xml(4)配置文件\WebRoot\WEB-INF\web.xmlDBConnectionjdbc/mysqlDBjavax.sql.DataSourceContainer,3.2C3P0使用,(5)編碼java.sql.*javax.naming.*javax.sql.*com.mchange.v2.c3p0.*,3.2C3P0使用,3.2C3P0使用,在JSP文件中中添加代碼字段1:字段2:,C3P0的另一使用方法,創(chuàng)建DB包,創(chuàng)建DBUtil類。創(chuàng)建靜態(tài)方法getConn(),靜態(tài)方法close()。用于連接關(guān)閉數(shù)據(jù)源。,示例代碼,publicclassDBCPTest{privatestaticBasicDataSourcebds=null;privatestaticConnectionFactorycf=null;static{bds=newBasicDataSource();bds.setDriverClassName("com.microsoft.sqlserver.jdbc.SQLServerDriver");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);}publicstaticConnectiongetConnection()throwsSQLException{returncf.createConnection();}publicstaticvoiddestroy()throwsSQLException{cf=null;bds.close();bds=null;}publicstaticvoidmain(String[]args)throwsException{System.out.println(DBCPTest.getConnection());}},3.3配置TomcatJNDI數(shù)據(jù)庫(kù)連接池1,第一步:加載數(shù)據(jù)驅(qū)動(dòng)包。Tomcate5.5將數(shù)據(jù)庫(kù)驅(qū)動(dòng)包拷貝到tomcathome/common/lib目錄下。Tomcate6.0將數(shù)據(jù)庫(kù)驅(qū)動(dòng)包拷貝到tomcathome/lib目錄下。,配置TomcatJNDI數(shù)據(jù)庫(kù)連接池2,第二步:配置tomcat連接池文件。A>在web工程中的META-INF創(chuàng)建context.xml文件在文件中寫入內(nèi)容:,,配置TomcatJNDI數(shù)據(jù)庫(kù)連接池3,第三步:在web.xml配置如下:,connpooljavax.sql.DataSourceContainer,配置TomcatJNDI數(shù)據(jù)庫(kù)連接池4,第四步:修改DBUtil類。,publicclassDBUtil{privateDBUtil(){}publicstaticConnectiongetConn()throwsException{ContextinitCtx=newInitialContext();ContextenvCtx=(Context)initCtx.lookup("java:comp/env");DataSourceds=(DataSource)envCtx.lookup("connpool");returnds.getConnection();}},JNDI與tomcat連接池,私有數(shù)據(jù)庫(kù)連接池(Host節(jié)點(diǎn)里面),JNDI與tomcat連接池,公有數(shù)據(jù)庫(kù)連接池,JNDI與tomcat連接池,引用公有數(shù)據(jù)庫(kù)連接池(Host節(jié)點(diǎn)里面),JNDI與tomcat連接池,項(xiàng)目工程目錄WEB-INf\web.xml中配置,JNDI與tomcat連接池,JSP測(cè)試文件,JNDI與tomcat連接池,配置數(shù)據(jù)源的簡(jiǎn)單方法1)tomcat6.0后提供了context.xml,無(wú)需設(shè)置虛擬目錄和配置web.xml。將配置好的context.xml放到工程的META-INF\目錄下。context.xml,JNDI與tomcat連接池,(2)在程序中,通過(guò)tomcat服務(wù)器調(diào)用,總結(jié),數(shù)據(jù)庫(kù)連接池,可以緩存連接對(duì)象傳統(tǒng)的連接對(duì)象,在使用完后沒(méi)有很好的回收dbcp連接池,在多用戶訪問(wèn)時(shí),連接速度比較快連接池可以,有效的管理數(shù)據(jù)庫(kù)連接對(duì)象在tomcat上配置的連接池,一定要經(jīng)過(guò)tomcat的容器調(diào)用,- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問(wèn)題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開(kāi)word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 數(shù)據(jù)庫(kù)連接池 數(shù)據(jù)庫(kù)連接 PPT 課件
鏈接地址:http://m.appdesigncorp.com/p-13197536.html