`

java 各个连接池学习总结(DBCP C3P0 PROXOOL)

 
阅读更多
   要了解Java连接池我们先要了解数据库连接池(connection pool)的原理,Java连接池正是数据库连接池在Java上的应用。——我们知道,对于共享资源,有一个很著名的设计模式:资源池(Resource Pool)。
该模式正是为了解决资源的频繁分配﹑释放所造成的问题。为解决上述问题,可以采用数据库连接池技术。数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需“缓冲池”中取出一个,使用完毕之后再放回去。我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。更为重要的是我们可以通过连接池的管理机制监视数据库的连接的数量﹑使用情况,为系统开发﹑测试及性能调整提供依据。

C3P0
是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate一起发布,包括了实现jdbc3和jdbc2扩展规范说明的Connection 和Statement 池的DataSources 对象。(主页:http://sourceforge.net/projects/c3p0/)

BoneCP
是一个开源的快速的 JDBC 连接池。BoneCP很小,只有四十几K(运行时需要log4j和Google Collections的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。另外个人觉得 BoneCP 有个缺点是,JDBC驱动的加载是在连接池之外的,这样在一些应用服务器的配置上就不够灵活。当然,体积小并不是 BoneCP 优秀的原因,BoneCP 到底有什么突出的地方呢,请看看性能测试报告。(主页:http://jolbox.com/)

DBCP
(Database Connection Pool)是一个依赖Jakarta commons-pool对象池机制的数据库连接池,Tomcat的数据源使用的就是DBCP。目前 DBCP 有两个版本分别是 1.3 和 1.4。1.3 版本对应的是 JDK 1.4-1.5 和 JDBC 3,而1.4 版本对应 JDK 1.6 和 JDBC 4。因此在选择版本的时候要看看你用的是什么 JDK 版本了,功能上倒是没有什么区别。(主页:http://commons.apache.org/dbcp/)

Proxool
是一个Java SQL Driver驱动程序,提供了对你选择的其它类型的驱动程序的连接池封装。可以非常简单的移植到现存的代码中。完全可配置。快速,成熟,健壮。可以透明地为你现存的JDBC驱动程序增加连接池功能。

特点
1 dbcp
dbcp可能是使用最多的开源连接池,原因大概是因为配置方便,而且很多开源和tomcat应用例子都是使用的这个连接池吧。
这个连接池可以设置最大和最小连接,连接等待时间等,基本功能都有。
这个连接池的配置参见附件压缩包中的:dbcp.xml
使用评价:在具体项目应用中,发现此连接池的持续运行的稳定性还是可以,不过速度稍慢,在大并发量的压力下稳定性有所下降,此外不提供连接池监控。

2 c3p0
c3p0是另外一个开源的连接池,在业界也是比较有名的,这个连接池可以设置最大和最小连接,连接等待时间等,基本功能都有。
这个连接池的配置参见附件压缩包中的:c3p0.xml。
使用评价:在具体项目应用中,发现此连接池的持续运行的稳定性相当不错,在大并发量的压力下稳定性也有一定保证,此外不提供连接池监控。
        
3 proxool
proxool这个连接池可能用到的人比较少,但也有一定知名度,这个连接池可以设置最大和最小连接,连接等待时间等,基本功能都有。
这个连接池的配置参见附件压缩包中的:proxool.xml。
使用评价:在具体项目应用中,发现此连接池的持续运行的稳定性有一定问题,有一个需要长时间跑批的任务场景任务,同样的代码在另外2个开源连接池中成功结束,但在proxool中出现异常退出。

配置

<property name="connection.driver_class">org.gjt.mm.mysql.Driver</property> <property name="connection.url">jdbc:mysql://localhost:3306/struts?useUnicode=true&characterEncoding=GBK</property> <!-- 数据库用户名 --> 
<property name="connection.username">root</property> <!-- 数据库密码 --> 
<property name="connection.password">8888</property> 


上面的一段配置,在c3p0和dbcp中,都是必需的,因为hibernate会根据上述的配置来生成connections,再交给c3p0或dbcp管理。
但是,proxool则不能,虽然说服文档上说proxool也可以和hibernate结合,但我按照官方文档上的说明怎么配也出错,而且,到了 sun和hibernat有的官方网站上问了几天,都没有一个人回复。后来我只能让proxool自身来生成连接,这在下面再讲。


1 C3P0

只需在hibernate.cfg.xml中加入
<property name="c3p0.min_size">5</property> 
<property name="c3p0.max_size">30</property> 
<property name="c3p0.time_out">1800</property> 
<property name="c3p0.max_statement">50</property> 
<!--连接池中保留的最大连接数。默认值: 15 -->   
          <property name="maxPoolSize" value="20"/>  
          <!-- 连接池中保留的最小连接数,默认为:3-->  
          <property name="minPoolSize" value="2"/>  
          <!-- 初始化连接池中的连接数,取值应在minPoolSize与maxPoolSize之间,默认为3-->  
          <property name="initialPoolSize" value="2"/>  
  
          <!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。默认值: 0 -->   
          <property name="maxIdleTime">60</property>  
            
          <!-- 当连接池连接耗尽时,客户端调用getConnection()后等待获取新连接的时间,超时后将抛出SQLException,如设为0则无限期等待。单位毫秒。默认: 0 -->   
          <property name="checkoutTimeout" value="3000"/>  
            
          <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。默认值: 3 -->   
          <property name="acquireIncrement" value="2"/>  
  
         <!--定义在从数据库获取新连接失败后重复尝试的次数。默认值: 30 ;小于等于0表示无限次-->   
          <property name="acquireRetryAttempts" value="0"/>  
  
          <!--重新尝试的时间间隔,默认为:1000毫秒-->   
          <property name="acquireRetryDelay" value="1000" />  
  
          <!--关闭连接时,是否提交未提交的事务,默认为false,即关闭连接,回滚未提交的事务 -->   
          <property name="autoCommitOnClose">false</property>  
  
          <!--c3p0将建一张名为Test的空表,并使用其自带的查询语句进行测试。如果定义了这个参数那么属性preferredTestQuery将被忽略。你不能在这张Test表上进行任何操作,它将只供c3p0测试使用。默认值: null -->   
          <property name="automaticTestTable">Test</property>  
  
          <!--如果为false,则获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常,但是数据源仍有效保留,并在下次调用getConnection()的时候继续尝试获取连接。如果设为true,那么在尝试获取连接失败后该数据源将申明已断开并永久关闭。默认: false-->   
          <property name="breakAfterAcquireFailure">false</property>  
  
          <!--每60秒检查所有连接池中的空闲连接。默认值: 0,不检查 -->   
          <property name="idleConnectionTestPeriod">60</property>  
          <!--c3p0全局的PreparedStatements缓存的大小。如果maxStatements与maxStatementsPerConnection均为0,则缓存不生效,只要有一个不为0,则语句的缓存就能生效。如果默认值: 0-->   
          <property name="maxStatements">100</property>  
          <!--maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数。默认值: 0 -->   
          <property name="maxStatementsPerConnection"></property> 


还有在classespath中加入c3p0-0.8.4.5.jar

2 dbcp

在hibernate.cfg.xml中加入

<property name="dbcp.maxActive">100</property> 
<property name="dbcp.whenExhaustedAction">1</property> 
<property name="dbcp.maxWait">60000</property> 
<property name="dbcp.maxIdle">10</property> 

<property name="dbcp.ps.maxActive">100</property> 
<property name="dbcp.ps.whenExhaustedAction">1</property> 
<property name="dbcp.ps.maxWait">60000</property> 
<property name="dbcp.ps.maxIdle">10</property> 



还有在classespath中加入commons-pool-1.2.jar 和commons-dbcp-1.2.1.jar.


3 proxool

在hibernate.cfg.xml中加入

<property name="proxool.pool_alias">pool1</property> 
<property name="proxool.xml">ProxoolConf.xml</property> 
<property name="connection.provider_class">net.sf.hibernate.connection.ProxoolConnectionProvider</property> 


然后,在和hibernate.cfg.xml同一个目录下,加一个ProxoolConf.xml文件,内容为

<?xml version="1.0" encoding="utf-8"?> 
<!-- the proxool configuration can be embedded within your own application's. 
Anything outside the "proxool" tag is ignored. --> 
<something-else-entirely> 
<proxool> 
<alias>pool1</alias> 
<!--proxool只能管理由自己产生的连接--> 
<driver-url>jdbc:mysql://localhost:3306/struts?useUnicode=true&characterEncoding=GBK</driver-url> 
<driver-class>org.gjt.mm.mysql.Driver</driver-class> 
<driver-properties> 
<property name="user" value="root"/> 
<property name="password" value="8888"/> 
</driver-properties> 
<!-- proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁--> 
<house-keeping-sleep-time>90000</house-keeping-sleep-time> 
<!-- 指因未有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的用户连接就不会被接受--> 
<maximum-new-connections>20</maximum-new-connections> 
<!-- 最少保持的空闲连接数--> 
<prototype-count>5</prototype-count> 
<!-- 允许最大连接数,超过了这个连接,再有请求时,就排在队列中等候,最大的等待请求数由maximum-new-connections决定--> 
<maximum-connection-count>100</maximum-connection-count> 
<!-- 最小连接数--> 
<minimum-connection-count>10</minimum-connection-count> 
</proxool> 
</something-else-entirely> 



并在classespath中加入proxool-0.8.3.jar

转自:http://blog.sina.com.cn/s/blog_4b5bc01101010bss.html


分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    c3p0、proxool、dbcp数据库连接池

    本文将深入探讨三个常用的数据库连接池:C3P0、DBCP和Proxool,以及如何结合Log4j2进行日志记录。 ### C3P0 C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。C3P0的核心...

    三大连接池参数说明(DBCP\C3P0\Proxool)

    【三大连接池参数详解】 ...总结来说,三大连接池——DBCP、C3P0 和 Proxool,各有其特点和配置选项。选择合适的连接池并正确配置这些参数,能够提高数据库操作的效率,减少资源消耗,并确保系统的稳定运行。

    JAVA数据库连接池(C3P0,Druid,JNDI ,DBCP,Proxool,BoneCP)

    本文将详细介绍几个常见的Java数据库连接池实现:C3P0、Druid、JNDI、DBCP、Proxool以及BoneCP,并结合Spring+MyBatis+maven环境下的应用示例进行解析。 1. C3P0: C3P0是一个开源的JDBC连接池,它实现了数据源和...

    数据连接池用法(C3PO,proxool,dbcp,bonecp)

    本文将详细介绍四个常见的Java数据连接池组件——C3PO、Proxool、DBCP和BoneCP的配置与用法。 首先,我们来看C3PO(Comprehensive3rdPartyPooling),这是一个基于Apache Commons DBCP的数据库连接池实现,具有更好...

    java连接池的配置

    java连接池的配置 里面有C3P0连接池在tomcat中的详细配置 Java反射机制总结,tomcat下配置数据库连接池DBCP、C3P0、Proxool 总结spring下配置dbcp,c3p0,proxool数据源链接池

    HIbernate连接池配置总结基于第三方c3p0和proxool

    为了确保连接池的健康运行,可以启用连接池的监控和诊断功能,比如C3P0提供了日志输出和监控网页,便于查看连接池的状态,及时发现并解决问题。 总的来说,选择和配置适合的Hibernate连接池是优化数据库性能的关键...

    Spring3中配置DBCP,C3P0,Proxool,Bonecp数据源

    在Spring3中配置数据源,包括DBCP,C3P0,Proxool,Bonecp主要的数据源,里面包含这些数据源的jar文件和依赖文件及配置文件。。 如Bonecp目前听说是最快的数据源,速度是传统的c3p0的25倍, bonecp.properties文件: ...

    java hibernate中各种连接池比较

    本文将对比分析三个常见的开源数据连接池:C3P0、DBCP 和 Proxool,并深入探讨它们的主要参数和使用场景。 1. C3P0 Hibernate 开发团队推荐使用 C3P0 连接池。C3P0 是一个开源的 JDBC 连接池,它提供了强大的异常...

    proxool数据库连接池实例(带监控功能)

    Proxool与其他连接池如C3P0、DBCP等相比,具有配置灵活、监控能力强的特点。在Java应用中,Proxool能够与JDBC无缝集成,为应用程序提供高效的数据访问服务。 **Proxool的基本工作原理:** Proxool维护一个连接池,...

    Java各数据库连接池配置介绍

    在Java中,有多种数据库连接池实现,包括C3P0、DBCP和Proxool等。 **C3P0连接池配置参数详解** 1. `acquireIncrement`:当连接池中的连接耗尽时,一次同时尝试获取的连接数。默认值为3,意味着如果连接池为空,它...

    Hibernate的三种连接池设置C3P0、dbcp和Proxool

    博文链接:https://pantao.iteye.com/blog/142280

    java JDBC连接池

    Java JDBC连接池是一种高效管理数据库连接的技术,它允许...在实际开发中,除了Proxool外,还有其他流行的连接池实现,如C3P0、DBCP、HikariCP和Apache DBCP2等,它们各有优缺点,可以根据项目需求选择适合的连接池。

    proxool连接池使用详细说明

    虽然Proxool功能强大,但与C3P0、HikariCP、DBCP等其他连接池相比,Proxool的活跃度较低,社区支持和更新较少。因此,在选择连接池时,应根据项目需求和社区活跃度进行评估。 总的来说,Proxool连接池提供了一种...

    数据库连接池包(proxool.jar)

    Proxool与其他连接池(如C3P0、DBCP、HikariCP等)相比,有其独特的优点和特性,例如: - **轻量级**: Proxool的内存占用相对较小,适合小型项目或者资源有限的环境。 - **动态扩展性**: 可以动态调整连接池的大小...

    proxool连接池

    尽管Proxool具有很多优点,但在现代开发中,更常见的是使用如HikariCP、C3P0、DBCP或Apache DBCP2等其他连接池。这些连接池在性能、稳定性、社区支持和功能方面可能更胜一筹。然而,Proxool 的简单性和易于配置使其...

    Java Spring常用高性能连接池以及属性

    Java Spring常用高性能连接池以及属性 * C3P0比较耗费资源,效率方面可能要低一点。 * DBCP在实践中存在BUG,在某些种情会产生很多空连接不能释放,Hibernate3.0已经放弃了对其的支持。 * Proxool的负面评价较少,...

    Java连接池评估报告

    3. **资源管理**:为了减少资源浪费并支持分布式系统,建议使用能够有效管理连接的连接池,如C3P0和BoneCP。 总之,选择合适的数据库连接池对于提升应用性能至关重要。开发者应根据具体的应用场景和技术要求来做出...

Global site tag (gtag.js) - Google Analytics