首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

ava框架数据库连接池比较(c3p0,dbcp跟proxool)bonecp

2012-08-27 
ava框架数据库连接池比较(c3p0,dbcp和proxool)bonecpJava框架数据库连接池比较(c3p0,dbcp和proxool)??????

ava框架数据库连接池比较(c3p0,dbcp和proxool)bonecp

Java框架数据库连接池比较(c3p0,dbcp和proxool)?
?????????????? testOnBorrow="true" testWhileIdle="true" validationQuery="select 1 from dual"
?????????????? username="lda_master" url="jdbc:oracle:thin:@192.160.100.107:15537:lcststd"/>

n fatal-sql-exception
以逗号隔开的异常列表,当设置了此项之后,每当出现SQLException时都将与列表中异常项作比较,如果匹配则认为出现fatal异常,这将导致connection被丢弃,并且不论出现任何情况该异常将被重抛一次以通知用户发生的情况。默认值为null
n fatal-sql-exception-wrapper-class
如果配置了fatal-sql-exception,则默认的操作是丢弃引起SQLException的原因而只是抛出原始异常。使用fatal-sql-exception-wrapper-class这个特性可以将SQLException包装到继承SQLException或RunTimeException的任何异常类里。Proxool提供了两个类供使用FatalSQLException和FatalRunTimeException;使用这两个类的话就将该选项设置为'org.logicalcobwebs.proxool.FatalSQLException'或者'org.logicalcobwebs.proxool.FatalRuntimeException'。默认值为null
n house-keeping-sleep-time
proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁,默认值为30秒
n house-keeping-test-sql
如果侦察线程发现闲置连接,则会使用这个SQL语句来对这些连接进行检查;这项设置的语句应该能够被很快的执行,例如查询当前时间 [info.setProperty("proxool.house-keeping-test-sql", "select CURRENT_DATE");] 。如果不设置则该选项被忽略
n injectable-connection-interface、injectable-statement-interface、injectable-prepared-statement-interface、injectable-callable-statement-interface
n jmx
如果此项设为true,则连接池将被以名称"Proxool:type=Pool, name=<alias>"注册为JMS Server的MBean。默认值为false
n jmx-agent-id
当且仅当jmx选项设为true时使用,为以逗号分隔的连接持注册到的JMS代理名称列表;如果不设置则所有注册的JMX Server都将被使用
n maximum-active-time
线程最大存活时间,超过此时间的线程将被守护线程kill掉,默认值为5分钟
n maximum-connection-count
到数据库的最大连接数,超过了这个连接,再有请求时,就排在队列中等候,最大的等待请求数由simultaneous-build-throttle决定;默认值为15
n maximum-connection-lifetime
连接最大存活时间,毫秒为单位,默认值为4小时
n minimum-connection-count
不管是否被使用都保持开放的最小连接数,默认值为5
n overload-without-refusal-lifetime
用来判断连接池状态,如果在此选项设置时间内(毫秒为单位)拒绝了连接,则认为过负载。默认值为60秒
n prototype-count
最少保持的空闲连接数,注意与minimum-connection-count区分。默认值为0
n simultaneous-build-throttle
最大的等待请求数,默认值为10
n test-before-use
如果设为true则connection在使用前将以house-keeping-test-sql设置的语句测试,如果测试不通过则该connection被丢弃并会重新分配一个connection。默认为false
n test-after-use
如果设为true则connection在关闭(放回连接池)前将以house-keeping-test-sql设置的语句测试,如果测试不通过connection将被丢弃。默认值为false
? 与其它连接池特性的设置方法不同,Proxool不提供相应的set方法,所有特性都要以诸如info.setProperty("proxool.jmx", "false");方式设定
? 上述特性的可设置性已在代码中验证,具体性能是否能实现有待实际验证
? Proxool与DBCP以及C3P0的性能比较,网上众说纷纭,有待我们自己的测试

default-dependency-check="none">
<description>datasource</description>
<!-- ???
<bean id="dataSource" destroy-method="close">
??????? <property name="driverClass"><value>${jdbc.driverClassName}</value></property>
??????? <property name="jdbcUrl"><value>${jdbc.url}</value></property>
??????? <property name="user"><value>${jdbc.username}</value></property>
??????? <property name="password"><value>${jdbc.password}</value></property>??
??????? <property name="acquireIncrement"><value>5</value></property>
??????? <property name="idleConnectionTestPeriod"><value>3000</value></property>
??????? <property name="checkoutTimeout"><value>3000</value></property>
??????? <property name="maxPoolSize"><value>80</value></property>
??????? <property name="minPoolSize"><value>1</value></property>
??????? <property name="maxStatements"><value>6000</value></property>
??????? <property name="initialPoolSize"><value>5</value></property>
</bean-->

<!--
ComboPooledDataSource 参数说明

??? auth="Container"
??? type= "javax.sql.DataSource"
factory="org.apache.commons.dbcp.BasicDataSourceFactory"<!--这里使用的commons-dbcp连接池-->

<!--tomcat的dbcp对应的factory为:将commons替换为tomcat,也可不用配置-->
??? driverClassName="com.mysql.jdbc.Driver"
??? url="jdbc:mysql://localhost:3306/test"
??? username="root"
??? password=""
??? maxActive="100"
??? maxIdle="30"
??? maxWait="10000" >
</Resource>
?? <!--c3p0-->
<Resource auth="Container"
???? description="DB Connection"
???? driver/>

<!--proxool-->

<Resource name="jdbc/mysqlds-proxool"
???? auth="Container"??????
???? type="javax.sql.DataSource"
???? factory="org.logicalcobwebs.proxool.ProxoolDataSource"??????
???? proxool.alias="test"??????
???? user="root"????
???? password=""??????
???? delegateProperties="foo=1,bar=true"
???? proxool.jndi-name="mysqljndi"?????
???? proxool.driver-url="jdbc:mysql://127.0.0.1:3306/test"??????
???? proxool.driver-
???? proxool.prototype-count="3"
???? proxool.statistics="1m,15m,1d"
???? proxool.simultaneous-build-throttle="10"
???? proxool.minimum-connection-count="5"
???? proxool.maximum-connection-count="15"???
/>??

3、在web.xml中配置如下代码:

<resource-ref>??
<res-ref-name>jdbc/mysqlds-proxool</res-ref-name>?? <!--与context.xml下的Resources的name属性一致-->
<res-type>javax.sql.DataSource</res-type>??
<res-auth>Container</res-auth>??
</resource-ref>

4、获取连接java代码:

?? Context context = new InitialContext();
??? ds = (DataSource) context.lookup("java:/comp/env/jdbc/mysqlds-proxool");//与context.xml下的Resources的name属性一致

5、常见问题:

????? (1)create a new connection but it fail its test:

?????? 在配置proxool连接池时,可能会包以上错误,可以看看你的context.xml配置,将

}
}
}
4.3.1 模拟5个线程循环10次并发访问数据库
DBCP用时1181ms
C3P0用时860ms
Proxool用时1563ms
BoneCP用时31ms
4.3.2 模拟10个线程循环10次并发访问数据库
DBCP用时1188ms
C3P0用时953ms
Proxool用时1625ms
BoneCP用时63ms
4.3.3 模拟20个线程循环10次并发访问数据库
DBCP用时1204ms
C3P0用时1000ms
Proxool用时1640ms
BoneCP用时110ms
4.3.4 模拟30个线程循环10次并发访问数据库
DBCP用时1250ms
C3P0用时1047ms
Proxool用时1657ms
BoneCP用时156ms
4.3.5 模拟50个线程循环10次并发访问数据库
DBCP用时1406ms
C3P0用时1343ms
Proxool用时1843ms
BoneCP用时172ms
4.3.6 模拟100个线程循环10次并发访问数据库
DBCP用时1641ms
C3P0用时2703ms
Proxool用时2031ms
BoneCP用时532ms
4.3.7 模拟200个线程循环10次并发访问数据库
DBCP用时2093ms
C3P0用时4891ms
Proxool用时2406ms
BoneCP用时936ms
4.3.8 模拟500个线程循环10次并发访问数据库
DBCP用时3219ms
C3P0用时11703ms
Proxool用时3343ms
BoneCP用时1922ms
4.3.9 模拟800个线程循环10次并发访问数据库
DBCP用时4688ms
C3P0用时12063ms
Proxool用时4141ms
BoneCP用时2859ms
4.3.10 模拟1000个线程循环10次并发访问数据库
DBCP用时5187ms
C3P0用时12563ms
Proxool用时4703ms
BoneCP用时3610ms
4.3.11 模拟3000个线程循环10次并发访问数据库
DBCP用时14094ms
C3P0用时16297ms
Proxool用时11344ms
BoneCP用时11391ms
4.3.12 模拟5000个线程循环10次并发访问数据库
DBCP用时23610ms
C3P0用时22032ms
Proxool用时20125ms
BoneCP用时17125ms

4.4测试结果分析:

????????? 通过对四种数据库连接池的性能测试发现,BoneCP的性能明显优于其它三种.

热点排行