`
YOUNG918
  • 浏览: 185455 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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

阅读更多

转载:  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对象可以在池中空闲的最小时间,单位为毫秒

分享到:
评论

相关推荐

    基于MySQL数据库的查询性能优化研究.pdf

    1. 优化数据库连接池:根据实际情况合理配置数据库连接池的大小和参数,避免出现连接池溢出和等待的情况。 2. 适当使用索引:合理的索引设计可以大大提高查询速度,例如使用组合索引、避免使用 SELECT \* 等。 3. ...

    支持多数据库的ORM框架ef-orm.zip

    该框架对应用环境、连接池、 是否为J2EE应用等没有特殊要求。可以和EJB集成,也可与Spring集成,也可以单独使用。整个框架只有两个JAR包,模块和功能都较为轻量。依赖少 整个框架只有三个jar库。间接依赖仅有...

    数据库封装

    封装了几种使用的数据库,大型关系数据库PeostgreDB,嵌入式NOSQL数据库BerkeleyDB,SQL内存数据库sqlite,NOSQL内存数据库Perst以及多模式数据库 H2,这些数据库是在服务端进行组合使用的,以后会封装使用框架。并且...

    java开源包10

    BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...

    java开源包8

    BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...

    java开源包6

    BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...

    java开源包9

    BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...

    java开源包1

    BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...

    java开源包4

    BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...

    java开源包2

    BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...

    java开源包3

    BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...

    java开源包11

    BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...

    java开源包5

    BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...

    java开源包7

    BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...

    java开源包101

    BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...

    JAVA上百实例源码以及开源项目

    1个目标文件,JNDI的使用例子,有源代码,可以下载参考,JNDI的使用,初始化Context,它是连接JNDI树的起始点,查找你要的对象,打印找到的对象,关闭Context…… ftp文件传输 2个目标文件,FTP的目标是:(1)提高...

    JAVA上百实例源码以及开源项目源代码

    EJB中JNDI的使用源码例子 1个目标文件,JNDI的使用例子,有源代码,可以下载参考,JNDI的使用,初始化Context,它是连接JNDI树的起始点,查找你要的对象,打印找到的对象,关闭Context…… ftp文件传输 2个目标文件...

    Java资源包01

    BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...

    java面试题

    52.8. 有几种开源的数据库连接池: 29 53. 描述一下JVM加载class文件的原理机制? 30 54. socket编程 30 54.1. 什么是TCP/IP、UDP? 30 54.2. Socket在哪里呢? 31 54.3. Socket是什么呢? 32 54.4. socket的实现步骤...

Global site tag (gtag.js) - Google Analytics