`
dannyhz
  • 浏览: 394726 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

数据库连接池 dbcp与c3p0的使用

    博客分类:
  • DB
阅读更多
http://zc0604.iteye.com/blog/1160502 c3p0 和 dbcp

连接池原理

最近用到一个数据库连接池,由于要分析其各种性能指标,所以对数据库连接池技术做了一个简单的分析。从网上找到一个关于连接池设计的文章,写的不错。我认为:如果要设计一个数据库连接池,可以参考它的基本思路;如果要提高性能,还有很多细节要仔细研究,并做细致的分析对比。以下是转载的文章。

连接池原理

连接池技术的核心思想是:连接复用,通过建立一个数据库连接池以及一套连接使用、分配、治理策略,使得该连接池中的连接可以得到高效、安全的复用,避免了数据库连接频繁建立、关闭的开销。另外,由于对JDBC中的原始连接进行了封装,从而方便了数据库应用对于连接的使用(非凡是对于事务处理),提高了开发效率,也正是因为这个封装层的存在,隔离了应用的本身的处理逻辑和具体数据库访问逻辑,使应用本身的复用成为可能。连接池主要由三部分组成:连接池的建立、连接池中连接的使用治理、连接池的关闭。下面就着重讨论这三部分及连接池的配置问题。

1.1 连接池的建立

应用程序中建立的连接池其实是一个静态的。所谓静态连接池是指连接池中的连接在系统初始化时就已分配好,且不能随意关闭连接。Java中提供了很多容器类可以方便的构建连接池,如:Vector、Stack、Servlet、Bean等,通过读取连接属性文件Connections.properties与数据库实例建立连接。在系统初始化时,根据相应的配置创建连接并放置在连接池中,以便需要使用时能从连接池中获取,这样就可以避免连接随意的建立、关闭造成的开销。

1.2 连接池的治理

连接池治理策略是连接池机制的核心。当连接池建立后,如何对连接池中的连接进行治理,解决好连接池内连接的分配和释放,对系统的性能有很大的影响。连接的合理分配、释放可提高连接的复用,降低了系统建立新连接的开销,同时也加速了用户的访问速度。下面介绍连接池中连接的分配、释放策略。

连接池的分配、释放策略对于有效复用连接非常重要,我们采用的方法是一个很有名的设计模式:Reference Counting(引用记数)。该模式在复用资源方面应用的非常广泛,把该方法运用到对于连接的分配释放上,为每一个数据库连接,保留一个引用记数,用来记录该连接的使用者的个数。具体的实现方法是:

当客户请求数据库连接时,首先查看连接池中是否有空闲连接(指当前没有分配出去的连接)。假如存在空闲连接,则把连接分配给客户并作相应处理(即标记该连接为正在使用,引用计数加1)。假如没有空闲连接,则查看当前所开的连接数是不是已经达到maxConn(最大连接数),假如没达到就重新创建一个连接给请求的客户;假如达到就按设定的maxWaitTime(最大等待时间)进行等待,假如等待maxWaitTime后仍没有空闲连接,就抛出无空闲连接的异常给用户。

当客户释放数据库连接时,先判定该连接的引用次数是否超过了规定值,假如超过就删除该连接,并判定当前连接池内总的连接数是否小于minConn(最小连接数),若小于就将连接池布满;假如没超过就将该连接标记为开放状态,可供再次复用。可以看出正是这套策略保证了数据库连接的有效复用,避免频繁地建立、释放连接所带来的系统资源开销。

1.3 连接池的关闭

当应用程序退出时,应关闭连接池,此时应把在连接池建立时向数据库申请的连接对象统一归还给数据库(即关闭所有数据库连接),这与连接池的建立正好是一个相反过程。

1.4 连接池的配置

数据库连接池中到底要放置多少个连接,才能使系统的性能更佳,用minConn和maxConn来限制。minConn是当应用启动的时候连接池所创建的连接数,假如过大启动将变慢,但是启动后响应更快;假如过小启动加快,但是最初使用的用户将因为连接池中没有足够的连接不可避免的延缓了执行速度。因此应该在开发的过程中设定较小minConn,而在实际应用的中设定较大minConn。maxConn是连接池中的最大连接数,可以通过反复试验来确定此饱和点。为此在连接池类ConnectionPool中加入两个方法getActiveSize()和getOpenSize(),ActiveSize 表示某一时间有多少连接正被使用,OpenSize表示连接池中有多少连接被打开,反映了连接池使用的峰值。将这两个值在日志信息中反应出来, minConn的值应该小于平均ActiveSize,而maxConn的值应该在activeSize和OpenSize之间
分享到:
评论

相关推荐

    数据库连接池dbcp和c3p0jar包

    "数据库连接池dbcp和c3p0jar包"这个压缩包包含了这两个库的JAR文件,开发者可以解压并导入到自己的项目中,然后通过简单的代码配置来启用数据库连接池服务。例如,使用Spring框架,可以在配置文件中声明数据源,指定...

    常用数据库连接池 (DBCP、c3p0、Druid) 配置说明1

    本文主要探讨了三个常用的数据库连接池:DBCP、c3p0和Druid,以及它们的配置说明。 1. **DBCP(Apache Commons DBCP)** DBCP是Apache Commons项目的一部分,它依赖于Apache Commons Pool对象池机制来管理数据库...

    DBCP,C3P0数据库连接池jar包

    DBCP(Jakarta DBCP)和C3P0是两种常用的数据库连接池实现,它们在提高应用程序效率、优化数据库资源使用方面起到了重要作用。 **DBCP(Jakarta DBCP)** DBCP是Apache软件基金会的一个项目,全称为Jakarta ...

    DBCP连接池DBCP和C3P0配置

    Apache DBCP(Database Connection Pool)和C3P0都是流行的开源数据库连接池实现。 - **DBCP**:Apache DBCP是Apache Commons Pool项目中的一个子项目,它提供了对数据库连接池的实现。 - **C3P0**:C3P0(Concise ...

    数据库连接池基础知识_dbcp_c3p0_简单了解

    本文将深入探讨数据库连接池的基础知识,特别是关于DBCP(Jakarta Commons DBCP)和C3P0两个流行的连接池实现。 首先,让我们了解什么是数据库连接池。数据库连接池是在应用服务器启动时创建的一组预定义的数据库...

    开源数据库连接池c3p0

    相比其他流行的数据库连接池,如DBCP、HikariCP、Druid等,c3p0在某些方面可能稍显落后,例如性能和内存占用。但其丰富的配置选项和良好的兼容性仍使其在某些场景下成为不错的选择。例如,对于小型项目或对性能要求...

    数据库连接池DBCP,jar包

    数据库连接池(DBCP)是Java应用中用于管理数据库连接的一种技术,它允许应用程序重复使用已建立的数据库连接,而不是每次需要访问数据库时都创建新的连接。这样可以显著提高应用程序的性能,减少系统资源的消耗,并...

    DBCP数据库连接池jar包.zip

    同时,DBCP2相比其他数据库连接池,如C3P0、HikariCP等,可能在性能和稳定性方面稍逊一筹,因此在选择时应根据项目需求进行权衡。 总的来说,DBCP2是一个适用于学习和小型项目的数据库连接池实现,对于初学者来说,...

    数据库连接池资源包(c3p0 , dbcp,druid连接池)

    本资源包包含三个主流的数据库连接池实现:c3p0、dbcp和Druid。它们各有特点,适应不同的应用场景。 1. **c3p0**:全称为Com形3P0,是由Miquel Arquero开发的一个开源的JDBC连接池。c3p0提供了完善的连接池管理和...

    开源数据库连接池dbcp

    开源数据库连接池DBCP,全称为Jakarta-Commons-DBCP,是Apache软件基金会Jakarta项目中的一个组件,主要用于解决Java应用程序与数据库之间的连接管理问题。DBCP提供了一个高效且可配置的数据库连接池,使得多个...

    基于DBCP/c3p0/Tomcat的数据库连接池的demo

    本示例将详细介绍如何使用DBCP(Database Connection Pool)、c3p0以及Tomcat内置的数据源来实现数据库连接池的配置与使用。 **DBCP(Database Connection Pool)** DBCP是Apache软件基金会的Jakarta项目下的一个子...

    DBCP,c3p0连接池所需要的包

    DBCP(Jakarta DBCP)和c3p0是两种常用的开源数据库连接池实现。 DBCP,全称Jakarta Commons DBCP,是Apache软件基金会下的一个项目,它基于Apache的Jakarta POI项目中的DBUtils模块发展而来。DBCP提供了一个可配置...

    c3p0和DBCP数据库连接池jar包和源码

    c3p0和DBCP(BasicDataSource)是两个广泛应用的开源数据库连接池实现。 c3p0是一个完全开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。c3p0-0.9.5.2.jar包含了c3p0的运行时库,而...

    数据库连接池dbcp几个jar包,commons-dbcp.jar、c3p0-0.9.1.2.jar等

    在实际应用中,开发人员可以根据需求选择使用DBCP或C3P0,或者与其他数据库连接池库如HikariCP、Druid等结合。这些库通常通过JDBC API与各种数据库进行交互,因此它们可以与多种数据库管理系统兼容,如MySQL、Oracle...

    c3p0数据库连接池

    **c3p0数据库连接池详解** c3p0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。c3p0的主要功能是管理数据库连接,通过复用已存在的连接来提高数据库访问效率,减少系统资源...

    数据库连接池C3P0.zip

    在本压缩包“数据库连接池C3P0.zip”中,包含了C3P0数据库连接池的相关jar包以及配置文件,用于帮助开发者集成到他们的Java应用中,特别是与MYSQL数据库配合使用。 C3P0的主要特性包括: 1. **连接池管理**:C3P0...

    数据库连接池c3p0所需jar包

    - **commons-pool**:Apache Commons Pool是通用的对象池服务,可以用于创建各种资源的池化,包括C3P0在内的数据库连接池在底层使用了这个库来实现对象的管理和复用。 在实际开发中,你通常会将这些JAR包添加到项目...

    dbcp数据库连接池

    **数据库连接池(DBCP)** 是一个在Java应用程序中管理数据库连接的工具,它能够有效地提高数据库操作的性能和效率。...理解和掌握DBCP的使用和配置,对于理解数据库连接池的工作原理和提升应用性能具有重要意义。

    c3p0数据库连接池所需jar包

    C3P0是一个开源的Java数据库连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。在Java应用程序中,数据库连接池扮演着非常重要的角色,它能够有效地管理数据库连接,提高系统性能,减少数据库资源...

Global site tag (gtag.js) - Google Analytics