几种开源数据库连接池的使用感受
来源:互联网 发布:矢量地图制作软件 编辑:程序博客网 时间:2024/06/14 00:50
在项目中尝试使用了几种开源的数据库连接池实现。一种是dbcp,一种是c3p0,还有一种是proxool,这几种数据库连接池都可以很容易的在Spring配置起来。性能总体上上感觉dbcp为最优,因为稳定性和并发性都是我的项目需要的。
项目中经过反复测试,如果web server和数据库server不是同一个机器的话,在断网时间比较短的时间内三种数据库连接池都能较好的重连,但是在断网时间超过8个钟头proxool就不能恢复工作了。但是dbcp却能很快的重新连接。实际生产环境中稳定性和总体性能是最重要的,都需要做相应的测试才能放心的让系统上生产线。
这里给出项目中数据库连接池配置:
dbcp的jndi:
2 class="org.springframework.jndi.JndiObjectFactoryBean">
3 <property name="jndiName">
4 <value>java:comp/env/jdbc/mysql</value>
5 </property>
6 </bean>
proxool(proxool-0.9.0RC1)的配置:
class="org.logicalcobwebs.proxool.ProxoolDataSource"
lazy-init="false">
<property name="driver">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="driverUrl">
<value>jdbc:mysql://ip:3306/dbname?useUnicode=true&characterEncoding=utf8&autoReconnect=true</value>
</property>
<property name="user">
<value>user</value>
</property>
<property name="password">
<value>password</value>
</property>
<property name="maximumConnectionCount">
<value>500</value>
</property>
<property name="houseKeepingSleepTime">
<value>15000</value>
</property>
<property name="houseKeepingTestSql">
<value>select CURRENT_DATE</value>
</property>
<property name="testBeforeUse">
<value>true</value>
</property>
<property name="alias">
<value>mysqlProxoolDataSource</value>
</property>
<!--
<property name="maximumActiveTime">
<value>10000</value>
</property>
-->
<property name="simultaneousBuildThrottle">
<value>1000</value>
</property>
<property name="trace">
<value>false</value>
</property>
</bean>
建议使用DBCP,配置在tomcat中,然后在spring中使用jndi的形式获取。
c3p0(c3p0-0.9.0):
2 destroy-method="close">
3 <property name="driverClass">
4 <value>com.mysql.jdbc.Driver</value>
5 </property>
6 <property name="jdbcUrl">
7 <value>jdbc:mysql://192.168.0.225:3306/sendinmdb?useUnicode=true&characterEncoding=utf8&autoReconnect=true</value>
8 </property>
9 <property name="user">
10 <value>********</value>
11 </property>
12 <property name="password">
13 <value>********</value>
14 </property>
15 <property name="maxPoolSize">
16 <value>100</value>
17 </property>
18 <property name="maxIdleTime">
19 <value>50</value>
20 </property>
21 <property name="maxStatementsPerConnection">
22 <value>100</value>
23 </property>
24 <property name="numHelperThreads">
25 <value>1000</value>
26 </property>
27 <property name="idleConnectionTestPeriod">
28 <value>30</value>
29 </property>
30 </bean>
直接copy & paste到spring配置文件里就可以使用了。
配置一些额外的tomcat 的DBCP连接池参数,也可以更好的使用到类似proxool提供的功能,只是dbcp更加稳定而已。
tomcat/conf/context.xml中插入一个Resource元素:
maxActive="1000" maxIdle="30" maxWait="10000"
username="user" password="password" driverClassName="com.mysql.jdbc.Driver"
validationQuery = "select current_date()"
testOnBorrow = "true" testOnReturn = "false" testWhileIdle = "true"
timeBetweenEvictionRunsMillis = "15000" numTestsPerEvictionRun = "10" minEvictableIdleTimeMillis = "600000"
url="jdbc:mysql://ip:3306/sendinmdb?useUnicode=true&characterEncoding=utf8&autoReconnect=true"/>
解释一下以下这些参数的含义:
validationQuery = "select current_date()"
testOnBorrow = "true"
testOnReturn = "false"
testWhileIdle = "true"
当从池中获取一个Connection后使用 select current_date() 来测试该数据库连接的可用性,如果SQL语句返回结果则认为是一个有效的连接,否则将继续测试知道可以拿到有效的连接。当返回Connection给池的时候不进行验证,但是Connection空闲的时候就要进行认证。
timeBetweenEvictionRunsMillis = "15000"
DBCP 清空线程睡眠的间隙,如值为负数则不运行该线程
numTestsPerEvictionRun = "10"
清空线程每次验证的连接对象个数
minEvictableIdleTimeMillis = "600000"
Connection对象可以在池中空闲的最小时间,单位为毫秒
详细配置请访问
http://jakarta.apache.org/commons/dbcp/configuration.html
- 姚博文 几种开源数据库连接池的使用感受
- 几种开源数据库连接池的使用感受
- 数据库连接池的使用
- 数据库连接池的使用
- 数据库连接池的使用
- 数据库连接池的使用
- dataSource数据库连接池的使用
- dbcp数据库连接池的使用
- 数据库连接池使用的优点
- 数据库连接池libzdb的使用
- c3p0数据库连接池的使用
- oracle数据库连接池的使用
- DBCP数据库连接池的使用
- DBCP数据库连接池的使用
- c3p0数据库连接池的使用
- JDBC数据库连接池的使用
- c3p0数据库连接池的使用
- c3p0数据库连接池的使用
- 消息映射的实现
- sqlserver 存储过程中游标嵌套循环
- ff删除httpwatch插件
- ubuntu下载jdk-6u21-linux-i586.bin
- 电影《在云端》经典对白翻译
- 几种开源数据库连接池的使用感受
- OpenCV数字图像处理一:数学基础及相关运算:点运算
- linux磁盘IO查看(iostat)
- Spring框架
- SQlite数据库的特点
- java内部类用途之多继承
- Android怎么去除Dialog对话框的白色边框
- Android怎么去除Dialog对话框的白色边框
- Android怎么去除Dialog对话框的白色边框