返回首页

几种开源数据库连接池的使用

时间:2009-04-29 22:59来源:未知 作者:admin 点击:
转载: http://www.blogjava.net/fantasyginge/ 在项目中尝试使用了几种开源的数据库连接池实现。一种是dbcp,一种是c3p0,还有一种是proxool,这几种数据库连接池都可以很容易的在Spring配置起来。性能总体上
  

转载:  http://www.blogjava.net/fantasyginge/

在项目中尝试使用了几种开源的数据库连接池实现。一种是dbcp,一种是c3p0,还有一种是proxool,这几种数据库连接池都可以很容易的在Spring配置起来。性能总体上上感觉dbcp为最优,因为稳定性和并发性都是我的项目需要的。
     项目中经过反复测试,如果web server和数据库server不是同一个机器的话,在断网时间比较短的时间内三种数据库连接池都能较好的重连,但是在断网时间超过8个钟头 proxool就不能恢复工作了。但是dbcp却能很快的重新连接。实际生产环境中稳定性和总体性能是最重要的,都需要做相应的测试才能放心的让系统上生 产线。


这里给出项目中数据库连接池配置:

dbcp的jndi:

1<bean id="dataSource"
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)的配置:

<bean id="MySqlDataSource"
   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&amp;characterEncoding=utf8&amp;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):

1<bean id="dataSource"      class="com.mchange.v2.c3p0.ComboPooledDataSource"
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&amp;characterEncoding=utf8&amp;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元素:

<Resource name="jdbc/mysql" auth="Container" type="javax.sql.DataSource"
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&amp;characterEncoding=utf8&amp;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对象可以在池中空闲的最小时间,单位为毫秒

顶一下
(1)
50%
踩一下
(1)
50%
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
发布者资料
小朱 查看详细资料 发送留言 加为好友 用户等级:超级会员 注册时间:2008-11-18 17:11 最后登录:2012-09-01 20:09
推荐内容
热点内容