数据库连接池_第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驱动程序,供应了对你选择的其它类型的驱动程

序的连接池封装。可以特别简洁的移植到现存的代码中。完全可配置。快速,成熟,健壮。

可以透亮地为你现存的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

提交评论