數據庫連接池_第1頁
數據庫連接池_第2頁
數據庫連接池_第3頁
數據庫連接池_第4頁
數據庫連接池_第5頁
已閱讀5頁,還剩11頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

名目

一.數據庫連接池概述...........................................................2

1、簡介......................................................................2

2、影響因素..................................................................2

3、Java中開源的數據庫連接池................................................2

二.幾種常用的數據連接池......................................................3

1、DBCP..........................................................3

1.簡介................................................................3

2.屬性說明及完整配置.................................................3

2、C3P0..........................................................4

1.簡介................................................................4

2.屬性說明及完整配置.................................................4

3、Proxool.......................................................6

1.簡介................................................................6

2.屬性說明及完整配置.................................................6

三.DBCP、C3P0、Proxool性能比較.............................................8

1.DBCP......................................................8

2.C3PO......................................................8

3.Proxool....................................................8

4.總結時刻.............................................................9

四.數據庫連接池死鎖的緣由和處理方法..........................................9

1.死鎖的產生原理.....................................................9

2.解決方法............................................................9

五.Java代碼(MySql)...............................................10

1.直接連接數據庫的情形..............................................10

2.使用DBCP連接池...................................................11

3.使用C3Po連接池:.................................................12

4.使用Proxool連接池:..............................................14

數據庫連接池概述

1、簡介

數據庫連接是一種關鍵的有限的昂貴的資源,這一點在多用戶的網頁應用程序中體現得

尤為突出。對數據庫連接的管理能顯著影響到整個應用程序的伸縮性和健壯性,影響到程序

的性能指標。數據庫連接池正是針對這個問題提出來的。數據庫連接池負責安排、管理和釋

放數據庫連接,它允許應用程序重復使用一個現有的數據庫連接,而再不是重新建立一個;

釋放空閑時間超過最大空閑時間的數據庫連接來避開由于沒有釋放數據庫連接而引起的數

據庫連接遺漏。這項技術能明顯提高對數據庫操作的性能。

2、影響因素

數據庫連接池在初始化時將創建肯定數量的數據庫連接放到連接池中,這些數據庫連接

的數量是由最小數據庫連接數來設定的。無論這些數據庫連接是否被使用,連接池都將始終

保證至少擁有這么多的連接數量。連接池的最大數據庫連接數量限定了這個連接池能占有的

最大連接數,當應用程序向連接池懇求的連接數超過最大連接數量時,這些懇求將被加入到

等待隊列中。數據庫連接池的最小連接數和最大連接數的設置要考慮到下列兒個因素:

1)最小連接數

是連接池始終保持的數據庫連接,所以假如應用程序對數據庫連接的使用量不大,將會

有大量的數據庫連接資源被鋪張;

2)最大連接數

是連接池能申請的最大連接數,假如數據庫連接懇求超過此數,后面的數據庫連接懇求

將被加入到等待隊列中,這會影響之后的數據庫操作。

3)假如最小連接數與最大連接數相差太大,

那么最先的連接懇求將會獲利,之后超過最小連接數量的連接懇求等價于建立一個新的

數據庫連接。不過,這些大于最小連接數的數據庫連接在使用完不會立刻被釋放,它將被放

到連接池中等待重復使用或是空閑超時后被釋放。

3、Java中開源的數據庫連接池

原理:

預先在緩沖池中放入肯定數量的連接,當需要建立數據庫連接時,只需從連接池中取出

一個,使用完畢之后再放回去。

在Java中開源的數據庫連接池有以下幾種:

1、C3P0:C3Po是一個開放源代碼的JDBC連接池,它在lib名目中與Hibernate一起發

布,包括了實現jdbc3和jdbc2擴展法律規范說明的Connection和Statement池的

DataSources對象。

2、Proxool:這是一個JavaSQLDriver驅動程序,供應了對你選擇的其它類型的驅動程

序的連接池封裝??梢蕴貏e簡潔的移植到現存的代碼中。完全可配置??焖?,成熟,健壯。

可以透亮地為你現存的JDBC驅動程序增加連接池功能。

3、JakartaDBCP:DBCP是一個依靠Jakartacommons-pool對象池機制的數據庫連接

池.DBCP可以直接的在應用程序用使用。

4、DDConnectionBroker:DDConnectionBroker是一個簡潔,輕量級的數據庫連接池。

5、DBPool:DBPool是一個高效的易配置的數據庫連接池。它除了支持連接池應有的功能

之外,還包括了一個對象池使你能夠開發一個滿意自己需求的數據庫連接池。

6、XAPool:XAPool是一個XA數據庫連接池。它實現了javax.sql.XADataSource并供應

了連接池工具。

7、Primrose:Primrose是一個Java開發的數據庫連接池。當前支持的容器包括

Tomcat4&5,Resin3與JBoss3.它同樣也有一個獨立的版本可以在應用程序中使用而不必運

行在容器中。Primrose通過一個web接口來掌握SQL處理的追蹤,配置,動態池管理。在

重負荷的狀況下可進行連接懇求隊列處理。

8sSmartPool:SmartPool是一個連接池組件,它仿照應用服務器對象池的特性。SmartPool

能夠解決一些臨界問題如連接泄漏(connectionleaks),連接堵塞,打開的JDBC對象如

Statements,PreparedStatements等.SmartPool的特性包括支持多個pools,自動關閉相關

聯的JDBC對象,在所設定time-outs之后察覺連接泄漏,追蹤連接使用狀況,強制啟用最近

最少用到的連接,把SmartPool"包裝”成現存的一個pool等。

9、MiniConnectionPoolManager:MiniConnectionPoolManager是一個輕量級JDBC數據庫

連接池。它只需要Javal.5(或更高)并且沒有依靠第三方包。

10、BoneCP:BoneCP是一個快速,開源的數據庫連接池。幫你管理數據連接讓你的應用

程序能更快速地訪問數據庫。比C3P0/DBCP連接池快25倍。

二.幾種常用的數據連接池

1、DBCP

1.簡介

DBCP(DataBaseconnectionpool),數據庫連接池。是apache上的一個java連接池

項目,也是tomcat使用的連接池組件。單獨使用dbcp需要3個包:

common-dbcp.jar,common-pool.jar,common-collections,jar由于建立數據庫連接是一個

特別耗時耗資源的行為,所以通過連接池預先同數據庫建立一些連接,放在內存中,應用程

序需要建立數據庫連接時直接到連接池中申請一個就行,用完后再放回去。

2.屬性說明及完整配置

NameDescDefault

defaultAutoCommit對于事務是否autoCommittrue

defaultReadOnly對于數據庫是否只能讀取false

driverClassName連接數據庫所用的JDBCDriverClass

maxActive可以從對象池中取出的對象最大個數,為0則表示沒8

有限制

maxldle最大等待連接中的數量,設0為沒有限制(對象池中

對象最大個數)

minldle對象池中對象最小個數

maxWait最大等待秒數,單位為ms,超過時間會丟出錯誤信

password登陸數據庫所用的密碼

url連接數據庫的URL

username登陸數據庫所用的帳號

validationQuery驗證連接是否勝利,SQLSELECT指令至少要返回一行

removeAbandoned是否自我中斷false

removeAbandonedTimeo幾秒后會自我中斷,removeAbandoned必需為true

ut

logAbandoned是否紀錄中斷大事false

minEvictableldleTime大于0,進行連接空閑時間推斷,或為0,對空閑的30分鐘

Millis連接不進行驗證

timeBetweenEvictionR失效檢查線程運行時間間隔,假如小于等于0,不會啟-1

unsMillis動檢查線程

testOnBorrow取得對象時是否進行驗證,檢查對象是否有效false

testOnReturn返回對象時是否進行驗證,檢查對象是否有效false

testWhileldle空閑時是否進行驗證,檢查對象是否有效false

initialSize初始化線程數

2、C3P0

1.簡介

C3Po是一個開源的JDBC連接池,它實現了數據源和JNDI綁定,支持JDBC3法律

規范和JDBC2的標準擴展。目前使用它的開源項目有Hibernate,Spring等。

2.屬性說明及完整配置

NameDescDefault

acquirelncrement當連接池中的連接耗盡的時候c3Po一次同時獵取的連3

接數

acquireRetryAttempts定義在從數據庫獵取新連接失敗后重復嘗試的次數30

acquireRetryDelay兩次連接中間隔時間,單位毫秒1000

autoCommitOnClose連接關閉時默認將全部未提交的操作回滾false

automaticTestTablec3Po將建一張名為Test的空表,并使用其自帶的查詢null

語句進行測試。假如定義了這個參數那么屬性

preferredTestQuery將被忽視。你不能在這張Test

表上進行任何操作,它將只供c3Po測試使用

breakAfterAcquireFai獵取連接失敗將會引起全部等待連接池來獵取連接的false

lure線程拋出特別。但是數據源仍有效保留,并在下次調

用getConnectionO的時候連續嘗試獵取連接。假如設

為true,那么在嘗試獵取連接失敗后該數據源將申明

已斷開并永久關閉

checkoutTimeout當連接池用完時客戶端調用getConnectionO后等待0

獵取新連接的時間,超時后將拋出SQLException,如設

為0則無限期等待。單位毫秒

connectionTesterClas通過實現ConnectionTester或QueryConnectionTcom.meh

sNameester的類來測試連接。類名需制定全路徑ange.v2

.c3p0.i

mpl.Def

aultCon

nection

Tester

factoryClassLocation指定c3Polibraries的路徑,假如(通常都是這樣)null

在本地即可獲得那么無需設置,默認null即可

idleConnectionTestPe每60秒檢查全部連接池中的空閑連接0

riod

initialPoolSize初始化時獵取三個連接,取值應在minPoolSize與3

maxPoolSize之間

maxIdleTime最大空閑時間,60秒內未使用則連接被丟棄。若為00

則永不丟棄

maxPoolSize連接池中保留的最大連接數15

maxStatementsJDBC的標準參數,用以掌握數據源內加載的0

PreparedStatements數量。但由于預緩存的

statements屬于單個connection而不是整個連接池。

所以設置這個參數需要考慮到多方面的因素。假如

maxStatements與maxStatementsPerConnection均為

0,則緩存被關閉

MaxStatementsPerConnmaxStatementsPerConnection定義了連接池內單個連0

ection接所擁有的最大緩存statements數

numHe1perThreadsc3P0是異步操作的,緩慢的JDBC操作通過關心進程完3

成。擴展這些操作可以有效的提升性能通過多線程實

現多個操作同時被執行

overrideDefaultUser當用戶調用getConnection()時使root用戶成為去獵Null

取連接的用戶。主要用于連接池連接非c3Po的數據源

II-J-

overrideDefauItPassw與overrideDefaultUser參數對應使用的一個參數Null

ord

password密碼Null

User用戶名Null

preferredTestQuery定義全部連接測試都執行的測試語句。在使用連接測Null

試的狀況下這個一顯著提高測試速度。留意:測試的

表必需在初始數據源的時候就存在

propertyCycle用戶修改系統配置參數執行前最多等待300秒300

testConnectionOnChec因性能消耗大請只在需要的時候使用它。假如設為false

kouttrue那么在每個connection提交的時候都將校驗其

有效性。建議使用idleConn6ctionTestPeriod或

automaticTestTable等方法來提升連接測試的性能

testConnectionOnChec假如設為true那么在取得連接的同時將校驗連接的有false

kin效性

3、Proxool

i.簡介

Proxool是一■種Java數據庫連接池技術。是sourceforge下的一個開源項目,這個項目

供應一個健壯、易用的連接池,最為關鍵的是這個連接池供應監控的功能,便利易用,便于

發覺連接泄漏的狀況。目前是和DBCP以及C3Po一起,最為常見的三種JDBC連接池技術。

日前,Hibernate官方宣布由于Bug太多不再支持DBCP,而推舉使用Proxool或C3P0。

2.屬性說明及完整配置

NameDescDefault

fatal-sql-exception它是一個逗號分割的信息片段.當一個SQL特別發生

時,他的特別信息將與這個信息片段進行比較.假如在

片段中存在,那么這個特別將被認為是個致命錯誤

(FatalSQLException).這種狀況下,數據庫連接將

要被放棄.無論發生什么,這個特別將會被重擲以供應

應消費者.用戶最好自己配置一個不同的特別來拋出

fatal-sql-exception-正如上面所說,你最好配置一個不同的特別來重擲.采

wrapper-class用這個屬性,用戶可以包裝SQLException,使他變成此

夕|、一個特別.這個特別或者繼承SQLException或者繼

承字RuntimeException.proxool自帶了2個實

現:'org.logicalcobwebs.proxool.FatalSQLExcept

ion''org.logicalcobwebs.proxool.FatalRuntimeE

xception'.后者更合適.

house-keeping-sleep-housekeeper保留線程處于睡眠狀態的最長時

time間,housekeeper的職責就是檢查各個連接的狀態,并

推斷是否需要銷毀或者創建

house-keeping-test-s假如發覺了空閑的數據庫連接.housekeeper將會用

ql這個語句來測試.這個語句最好特別快的被執行.假如

沒有定義,測試過程將會被忽視

injectable-connectio允許proxool實現被代理的connection對象法

n-interface

injectable-statement允許proxool實現被代理的Statement對象方法

-interface

injectable-prepared-允許proxool實現被代理的PreparedStatement對

statement-interface象方法

injectable-callable-允許proxool實現被代理的CallableStatement對

statement-interface象方法

jmx假如屬性為true,就會注冊一個消息Bean到jms服務,false

消息Bean對象名:“Proxool:type二Pool,

name=<alias>〃.

jmx-agent-id一個逗號分隔的JMX代理列表(如使用

MbeanServerFactory.findMBeanServer(String

agentld)注冊的連接池。)這個屬性是僅當"jmx"屬性

設置為"true”才有效。全部注冊jmx服務器使用這個

屬性是不確定的

jndi-name數據源的名稱

maximum-active-time假如housekeeper檢測到某個線程的活動時間大于這5分鐘

個數值.它將會殺掉這個線程.所以確認一下你的服務

器的帶寬.然后定一個合適的值.

maximum-connection-c最大的數據庫連接數

ount

maximum-connection-1一個線程的最大壽命

ifetime

minimum-connection-c最小的數據庫連接數

ount

overload-without-ref這可以關心我們確定連接池的狀態。假如我們已經拒60秒

usal-lifetime絕了一個連接在這個設定值(毫秒),然后被認為是超

載。

prototype-count連接池中可用的連接數量.假如當前的連接池中的連

接少于這個數值.新的連接將被建立(假設沒有超過最

大可用數).例如.我們有3個活動連接2個可用連接,

而我們的prototype-count是4,那么數據庫連接池將

試圖建立此外2個連接.這和

minimum-connection-count不同.minimum-connect

ion-count把活動的連接也計算在

內.prototype-count是spareconnections的數量.

recently-started-thr這可以關心我們確定連接池的狀態,連接數少還是多60秒

eshold或超載。只要至少有一個連接已開頭在此值(毫秒)內,

或者有一些多余的可用連接,那么我們假設連接池是

開啟的。

simultaneous-build-t這是我們可一次建立的最大連接數。那就是新增的連10

hrottle接懇求,但還沒有可供使用的連接。由于連接可以使用

多線程,在有限的時間之間建立聯系從而帶來可用連

接,但是我們需要通過一些方式確認一些線程并不是

馬上響應連接懇求的

statistics連接池使用狀況統計。參數“10s,Im,Id”

statistics-log-level日志統計跟蹤類型。參數“ERROR”或“INFO”

test-before-use假如為true,在每個連接被測試前都會服務這個連接,

假如一個連接失敗,那么將被丟棄,另一個連接將會

被處理,假如全部連接都失敗,一個新的連接將會被

建立。否則將會拋出一個SQLException特別。

test-after-use假如為true,在每個連接被測試后都會服務這個連接,

使其回到連接池中,假如連接失敗,那么將被廢棄。

trace假如為true,那么每個被執行的SQL語句將會在執行

期被log紀錄(DEBUGLEVEL).你也可以注冊一個

ConnectionListener(參看ProxoolFacade)得到這些

信息。

三.DBCP、C3P0、Proxool性能比較

1.DBCP

dbcp可能是使用最多的開源連接池,緣由也許是由于配置便利,而且許多開源和tomcat

應用例子都是使用的這個連接池吧。

這個連接池可以設置最大和最小連接,連接等待時間等,基本功能都有。這個連接池的配置

參見附件壓縮包中的:dbcp.xml

使用評價:在詳細項目應用中,發覺此連接池的持續運行的穩定性還是可以,不過速度稍慢,

在大并發量的壓力下穩定性

有所下降,此外不供應連接池監控

2.C3P0

c3Po是此外一個開源的連接池,在業界也是比較出名的,這個連接池可以設置最大和最

小連接,連接等待時間等,基本功能都有。

這個連接池的配置參見附件壓縮包中的:c3Po.xml。

使用評價:在詳細項目應用中,發覺此連接池的持續運行的穩定性相當不錯,在大并發量的

壓力下穩定性也有肯定保證,

此外不供應連接池監控。

3.Proxool

proxool這個連接池可能用到的人比較少,但也有肯定知名度,這個連接池可以設置最

大和最小連接,連接等待時間等,基本功能都有。

這個連接池的配置參見附件壓縮包中的:proxool.xml。

使用評價:在詳細項目應用中,發覺此連接池的持續運行的穩定性有肯定問題,有一個需要

長時間跑批的任務場景任務,同樣的代碼

在此外2個開源連接池中勝利結束,但在proxool中消失特別退出。

但是proxool有一個優勢一連接池監控,這是個很迷人的東西,也許的配置方式就是在

web.xml中添加如下定義:

<servlet>

<servlet-name>admin</servlet-name>

<servlet-class>org.logicalcobwebs.proxool.admin,servlet.AdminServlet</servlet-c

lass>

</servlet>

〈servlet-mapping〉

<servlet-name>admin</servlet-name>

<url-pattern>/admin</url-pattern>

</servlet-mapping>

并在應用啟動后訪問:http:〃localhost:8080/myapp/admin這個url即可監控

不過proxool本身的包在監測使用中會有編碼問題,附件中有一個

解決此問題的包,參見附件壓縮包中的:proxool-0.9.0RC3.jar?此外需要jdkl.5以上的

環境。

4.總結時刻

綜上所述,這幾種開源連接池各有優劣,推舉使用c3p0,經檢驗這種連接池性能穩定,

承壓力量強。而proxool盡管有明顯的性能問題,

但由于它具備監控功能,因此建議在開發測試時使用,有助于確定是否有連接沒有被關掉,

可以排解一些代碼的性能問題。

四.數據庫連接池死鎖的緣由和處理方法

1.死鎖的產生原理

數據庫連接池是java軟件常用的組件,但對數據庫連接池不正確的使用會造成軟件的

死鎖。死鎖的產生原理是:存在線程同時占有兩個以上的連接對象的狀況。

比如某連接池中有2個連接對象。

有兩個線程分別占用了一個,又分別來申請另一個。這時由于連接池空,而兩個線程本身都

卡在連接池上,不行能釋放原來占有的連接對象,這時產生死鎖。

連接池死鎖,會導致軟件和數據庫相關的部份無響應。比如登陸功能,會用數據庫做用戶校

驗,發生連接池死鎖后,登陸功能會無法使用(點登陸按鈕后,長時間無相應)。

2.解決方法

一個線程中同時只允許使用一個連接對象。

一段數據庫規律通常只需要一個連接對象,因此在一個方法中實現這點是比較簡潔的。

但是當發生如下情形時則比較麻煩:

有兩個方法A和B,A和B都要使用數據庫連接,而A在事務中調用了B。

為了解決這個問題有如下兩種方法:

一是,將連接對象放在線程的ThreadLocal中。這樣A和B即可共享連接對象了。但這

種方法需要考慮嵌套事務的問題。數據庫是不允許嵌套事務的。因此,要么避開嵌套事務,

要么自動合并事務。

留意:采納傳參的形式也可以做到這點,但只能就問題解決問題,不是框架層面的解決方案,

也要處理嵌套事務的問題。

二是,直接人為在代碼上保證一個線程不同時占有兩個連接對象。幸好這樣的狀況從閱

歷上看并不多,只要找到這樣的方法,想方法拆分一下規律,將調用的部份從事務中拿出來

即可。

還有一種奇怪的方法,就是新起一個線程來調用B。假如A對B的返回值有依靠關系,

這種方法是行不通的,不推舉使用。

有人認為只要給連接池設置一個超時就行了??墒?,這樣做并不恰當。由于,連接是應

當可以共享的,假如臨時,連接池內沒有連接可用,應當讓申請者等待可用的連接,而不是

拋出超時特別,這樣會導致申請者整個過程的失敗。

五.Java代碼(Oracle)

1.直接連接數據庫的情形

publicclassDBUtil{

/**

*單例模式創建數據庫對象

*/

privatestaticDBUtilinstance=null;

privateDBUtil(){}

//為了保證單例性,必需使用同步關鍵字

publicsynchronizedstaticDBUtilgetlnstanceO{

if(instance二二null)

instance二newDBUtil();

returninstance;

}

〃連接必要的信息

publicStringd!river〃〃=;

publicStringurl=,/jdbc:oracle:thin:@localhost:1521:ce〃;

publicStringusername二〃sys〃;

publicStringpassword=”123456〃;

publicConnectiongetConnectionO{

Connectionconn=null;

try(

Class.forName(driver);

conn=DriverManager.getConnection(ur1,username,password);

}catch(ClassNotFoundExceptione){

e.printStackTrace();

}catch(SQLExceptione){

e.printStackTrace();

)

returnconn;

}

〃測試連接的效率

publicstaticvoidmain(String[]args)throwsSQLException{

longbegin=System.currentTimeMillis();〃開頭時刻

for(inti=0;i<1000;i++){〃獲得1000次連接

Connectionconn=DBUtil.getlnstanceO.getConnection();

conn,close();

)

longend二System.currentTimeMillis();

System.out.printin(〃直接連接數據庫所需要的時間:〃+(end-begin));

〃在我的機子上1000次直接連接耗時:12031

)

)

2.使用DBCP連接池

/**

*數據庫連接池:

*它是程序啟動時建立足夠的數據庫連接,并將這些連接組成一個連接池,由程序動態的

對池中的連接進行申請,使用,釋放

*

*DBCP是apache組織下的一個開源項目

*需要兩個jar包,comnions-dbcpT.2.2和commons-pool

*這種連接池效率很高,但常常消失連接丟失現象,用的不是許多,用的多的是c3Po

**/

publicclassDBUtilOfDBCP{

privatestaticBasicDataSourcedataSource=null;〃數據源

privatestaticDataSourceConnectionFactoryfactory;〃連接工廠?

privatestaticDBUtilOfDBCPinstance=null;

privateDBUtilOfDBCPO{

dataSource=newBasicDataSource();

〃設置jdbc相關信息

dataSource.setUrl(url);

dataSource.setUsername(username);

dataSource.setPassword(password);

dataSource.setDriverClassName(driver);

〃連接池設置

dataSource.setlnitialSize(20);〃初始連接數

dataSource.setMaxActive(lOO);〃最大獵取連接數

dataSource.setMaxIdle(30);〃最大可用空閑連接數

dataSource.setMinldle(10);〃最小可用空閑連接數

factory=newDataSourceConnectionFactory(dataSource);

}

〃為了保證單例性,必需使用同步關鍵字

publicsynchronizedstaticDBUtilOfDBCPgetlnstanceO{

if(instance==null)

instance=newDBUtilOfDBCP。;

returninstance;

}

〃連接必要的信息

publicStringdriver—”;

publicStringurl="jdbc:oracle:thin:?localhost:1521:ce,z;

publicStringusername="sys";

publicStringpassword=〃123456〃;

publicConnectiongetConnection()throwsSQLException{

〃使用工廠創建連接

returnfactory.createConnection();

)

publicstaticvoidmain(String[]args)throwsSQLException{

longbegin=System.currentTimeMillis();〃開頭時刻

for(inti=0;i<1000;i++){//獲得1000次連接

Connectionconn=DBUtilOfDBCP.getInstance().getConnection();

conn,close();

)

longend二System.currentTimeMillis();

System.out.printIn("DBCP連接數據庫所需要的時間:〃+(end-b6gin));

〃在我的機子上1000次DBCP連接耗時:1000毫秒

}

)

3.使用C3Po連接池:

*C3P0,比較穩定

publicclassDBUtil0fC3P0{

privatestaticComboPooledDataSourcedataSource;

privatestaticDBUtil0fC3P0instance=null;

privateDBUtil0fC3P00{

dataSource=newComboPooledDataSource();

〃設置jdbc連接信息

dataSource.setUser(username);

dataSource.setPassword(password);

dataSource.setJdbcUrl(url);

try(

dataSource.setDriverClass(driver);

}catch(PropertyVetoExceptione){

e.printStackTrace();

)

〃設置連接池

dataSource.setInitialPoolSize(30);

dataSource.setMaxPoolSize(100);

dataSource.setMinPoolSize(10);

〃為了保證單例性,必需使用同步關鍵字

publicsynchronizedstaticDBUtil0fC3P0getInstance(){

if(instance==null)

instance=newDBUtil0fC3P0();

returninstance;

)

〃連接必要的信息

publicStringdriver=〃〃;

publicStringurl二〃jdbc:oracle:thin:?localhost:1521:cez,;

publicStringusername二〃sys〃;

publicStringpassword=〃123456〃;

publicConnectiongetConnection()throwsSQLException{

〃使用工廠創建連接

returndataSource.getConnectionO;

)

publicstaticvoidmain(String[]args)throwsSQLException{

longbegin=System.currentTimeMillis();〃開頭時刻

for(inti=0;i<1000;i++){〃獲得1000次連接

Connectionconn=DBUtil0fC3P0.getlnstance().getConnection();

conn,close();

longend二System,current?imeMi11is();

System.out.printin("C3Po連接數據庫所需要的時間:〃+(end-begin));

〃在我的機子上1000次C3P0連接耗時:1813毫秒

)

)

4.使用Proxool連接池:

首先在src名目下創建屬性配置文件

proxool.properties

jdbc-O.proxool.alias=test

jdbc-O.proxool.driver-url=jdbc:oracle:thin:?localhost:1521:ce

jdbc-O.proxool.driver-class二

jdb

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論