Chinaunix首页 | 论坛 | 博客
  • 博客访问: 135885
  • 博文数量: 36
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 415
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-21 13:03
文章分类

全部博文(36)

文章存档

2008年(36)

我的朋友

分类: 数据库开发技术

2008-06-27 10:09:05

 
    如需转载,请注明出自:  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/mysqlvalue>
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.Drivervalue>
  
property>
  
<property name="driverUrl">
   
<value>jdbc:mysql://ip:3306/dbname?useUnicode=true&characterEncoding=utf8&autoReconnect=truevalue>
  
property>
  
<property name="user">
   
<value>uservalue>
  
property>
  
<property name="password">
   
<value>passwordvalue>
  
property>
  
<property name="maximumConnectionCount">
   
<value>500value>
  
property>
  
<property name="houseKeepingSleepTime">
   
<value>15000value>
  
property>
  
<property name="houseKeepingTestSql">
   
<value>select CURRENT_DATEvalue>
  
property>
  
<property name="testBeforeUse">
   
<value>truevalue>
  
property>
  
<property name="alias">
   
<value>mysqlProxoolDataSourcevalue>
  
property>
  

  
<property name="simultaneousBuildThrottle">
   
<value>1000value>
  
property>
  
<property name="trace">
   
<value>falsevalue>
  
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.Drivervalue>
 5        property>
 6        <property name="jdbcUrl">
 7        <value>jdbc:mysql://192.168.0.225:3306/sendinmdb?useUnicode=true&characterEncoding=utf8&autoReconnect=truevalue>
 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>100value>
17        property>
18        <property name="maxIdleTime">
19        <value>50value>
20        property>
21        <property name="maxStatementsPerConnection">
22        <value>100value>
23        property>
24        <property name="numHelperThreads">
25        <value>1000value>
26        property>
27        <property name="idleConnectionTestPeriod">
28        <value>30value>
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&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对象可以在池中空闲的最小时间,单位为毫秒
阅读(3647) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~