`
chillwarmoon
  • 浏览: 155042 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

对commons-dbcp连接池的分析

阅读更多
转载请注明出处http://chillwarmoon.iteye.com
Apache的commons-pool提供了编写对象池的API,将用完的对象返回对象池中以便于下次利用,从而减少了对象创建时间。这对于创建对象相对耗时的应用来说,能够提高应用的性能。

commons-dbcp数据库连接池正是使用commons-pool来创建和数据库之间的连接对象,在对象池中保存这些对象,从而减少了频繁建立连接对象所造成的性能损耗。本文讲述了commons-dbcp是怎样利用commons-pool来建立对象池的。

例如在tomcat中,利用JNDI来查找到资源javax.sql.DataSource的实现,如果使用dbcp连接池,则该实现为org.apache.commons.dbcp.BasicDataSource。我们可以从这个称为“数据源”的类中调用getConnection方法来获得与数据库的连接。但内部是如何实现的呢?对象池在其中占据什么位置呢?这一切对于外部使用者来说是透明的。

BasicDataSource的getConnection首先建立了PoolingDataSource对象来getConnection。这个PoolingDataSource对象中引用了ObjectPool,在getConnection()时,是从ObjectPool中借用了一个对象,既调用ObjectPool.borrowObject()方法。而对于熟悉commons-pool的程序员来说,ObjectPool肯定有与之对应的Factory创建对象,并放到池中。因此dbcp通过实现了接口org.apache.commons.pool.PoolableObjectFactory的类org.apache.commons.dbcp.PoolableConnectionFactory的makeObject方法来创建连接Connection对象。然而PoolableConnectionFactory持有对ConnectionFactory的引用,ConnectionFactory可以有3种策略来创建Connection对象。其中DriverConnectionFactory调用了数据库厂商提供的Driver来获得Connection。如图所示。

在创建连接时,是创建的DelegatingConnection实例,该对象持有对池的引用,对于java.sql.Connectionl.close()方法来说是调用的对象池的returnObject方法来返回池,而不是真正的把连接关掉。而我们在外界调用这个方法时,并未发现这一点。而对于调用Connection的其他方法而言,都是委派到由Driver得到的Connection相对应的方法。即PoolableConnection-->Connection,前者实现了DelegatingConnection。

在用dbcp连接池的时候,若设置了poolPreparedStatements属性为true,则PoolableConnectionFactory在makeObject时,建立的连接存在的委派关系如下:PoolableConnection-->PoolingConnection-->Connection。PoolingConnection实现了KeyedPoolableObjectFactory,从而为与之对应的对象池keyedObjectPool形成双向关联。在对象池中,以PStmtKey(包含有sql等属性)来标示该池中的一类对象。因此在使用dbcp连接池时,若配置了poolPreparedStatements属性,注意尽量保持相同功能的sql写法一致,来充分利用对象池。
  • 描述: 类图
  • 大小: 30.7 KB
分享到:
评论
1 楼 lepoke 2009-03-27  
呵呵。。今天刚刚需要用到这个东西,LZ把原理都讲得差不多了。仔细看了一下。feel good!

Thank you very much~!

相关推荐

    commons-dbcp2-2.9.0-bin.zip

    DBCP(DataBase Connection Pool)是 apache common上的一个 java 连接池项目,也是 tomcat 使用的连接池组件,依赖 于Jakarta commons-pool 对象池机制,DBCP可以直接的在应用程序中使用。 使用DBCP会用到commons-...

    commons-dbcp-1.4.jar和commons-pool-1.5.6.jar

    4. **BasicDataSource**: 这是DBCP提供的一个具体的DataSource实现,包含了对数据库连接池的管理逻辑。 Apache Commons Pool则是Apache Commons项目下的另一个组件,专注于对象池的实现。`commons-pool-1.5.6.jar` ...

    commons-dbcp-1.4.jar依赖包

    Apache Commons DBCP是一个开源的Java库,用于管理数据库连接池。这个标题表明我们将讨论关于DBCP的连接池服务,以及它在Java应用程序中的作用。 **描述详解:** "DBCP(DataBase Connection Pool)数据库连接池,...

    dbcp连接池所需jar(commons-collections-3.1.jar,commons-dbcp-1.2.jar,commons-pool-1.6.)

    3. `commons-pool-1.6.jar`:Apache Commons Pool是通用的对象池服务,它是DBCP连接池依赖的基础。DBCP利用了Pool库来实现对象(这里是数据库连接)的池化管理,包括创建、分配、回收和销毁连接等操作。 使用DBCP...

    commons-pool-1.3.jar 和commons-dbcp-1.2.2.jar

    标题中的"commons-pool-1.3.jar"和"commons-dbcp-1.2.2.jar"是两个在Java开发中常用的开源库,主要用于数据库连接池管理。它们都是Apache Commons项目的一部分,旨在提高数据库访问效率,减少数据库资源的消耗。 ...

    commons-dbcp-1.2.1.jar + commons-pool-1.4.jar + commons-collections-3.2.jar

    在Java开发中,数据库连接管理是一项关键任务,而Apache Commons DBCP(Database Connection Pool)是广泛使用的数据库连接池实现之一。本主题将详细解析标题和描述中提及的三个核心库:`commons-dbcp-1.2.1.jar`、`...

    commons中的DBCP连接池jar

    标题"commons中的DBCP连接池jar"指的是Apache Commons DBCP的Java归档文件(JAR),它是Java应用程序可执行的二进制格式。这些JAR文件包括: 1. `commons-dbcp-1.4-javadoc.jar`:这个文件包含了DBCP 1.4版本的API...

    commons-dbcp2-2.7.0-bin.zip

    Apache Commons DBCP2是Apache软件基金会开发的一个数据库连接池组件,版本号为2.7.0。这个组件主要用于管理数据库连接,提高数据库操作的效率和性能,是Java应用程序中的重要工具。在Java环境中,频繁地打开和关闭...

    commons-dbcp jar包

    "spring开发的必备jar包"表明了在Spring框架的环境中,commons-dbcp扮演着重要角色,它提供了数据库连接池的功能,能够有效地管理和复用数据库连接,从而提高应用性能。 **Apache Commons DBCP介绍** Apache ...

    commons-dbcp2-2.2.0-bin.zip

    Apache Commons DBCP2是Apache软件基金会开发的一个开源数据库连接池组件,它的全名是"Database Connection Pool 2"。这个版本是2.2.0,包含在名为"commons-dbcp2-2.2.0-bin.zip"的压缩包文件中。DBCP2是一个为Java...

    commons-dbcp.jar.rar

    《深入理解Apache Commons DBCP:数据库连接池的基石》 Apache Commons DBCP(Database Connection Pool)是Java世界中广泛使用的数据库连接池组件,它为应用程序提供了高效的数据库连接管理。在Java应用开发中,...

    commons-collections.jar、commons-pool.jar、commons-dbcp-1.2.1.jar

    DBCP是一个基于连接池的数据库连接管理库,它依赖于`commons-pool.jar`和`commons-dbcp.jar`(包含了基本的数据库连接管理功能)。DBCP为应用程序提供了数据库连接的复用,减少了创建和关闭数据库连接的次数,从而...

    commons-dbcp-1.4、commons-pool-1.5.6 jar包

    Apache Commons DBCP 1.4 和 Commons Pool 1.5.6 是两个在Java开发中广泛使用的开源库,主要用于数据库连接池管理。这两个jar包是处理数据库连接管理和资源优化的关键组件,尤其在大型Web应用和服务中,它们扮演着至...

    commons-dbcp-1.4.zip

    Apache Commons DBCP,全称为"Database Connection Pool",是Apache软件基金会开发的一个开源项目,主要功能是提供数据库连接池的实现。这个组件是Java应用程序中管理数据库连接的有效工具,可以显著提高数据库操作...

    commons-dbcp-1.4&&commons-pool-1.3.jar

    Apache Commons DBCP(Database Connection Pool)是Apache开源组织提供的一个数据库连接池实现。它允许开发者在应用中高效地管理和重用数据库连接,从而提高系统性能并降低资源消耗。DBCP 1.4是这个库的一个稳定...

    commons-dbcp-1.4和commons-pool-1.6驱动包下载(亲测可用)

    Apache Commons DBCP 1.4 和 Apache Commons Pool 1.6 是两个在Java应用程序中广泛使用的开源库,主要用于数据库连接池的管理。这两个库在处理大量并发数据库访问时能够提高性能并优化资源利用。 Apache Commons ...

    commons-dbcp-1.2.2.jar &commons-pool-1.3.jar

    `commons-dbcp-1.2.2.jar`包含了实现DBCP连接池所需的类和接口,如BasicDataSource、PoolableConnection和PoolManager等。这些类用于初始化和配置数据库连接池,管理数据库连接的生命周期,以及处理连接的分配和释放...

    commons-collections-3.1.jar;commons-dbcp-1.2.1.jar;commons-pool-1.2.jar

    描述中提到的“tomcat 连接池”是指Tomcat服务器中的JDBC连接池实现,通常使用的就是Apache Commons DBCP。在Tomcat配置中,可以通过设置`context.xml`或`server.xml`来启用和配置DBCP,以优化对数据库的访问。 ...

    jdbc用到的jar包(commons-collections-3.1.jar、commons-dbcp-1.2.2.jar、commons-pool.jar)

    这是另一个Apache Commons项目,它是通用对象池实现,DBCP中的连接池就依赖于它。Commons Pool提供了一种高效的、基于对象池的机制,用于管理可重用对象。在DBCP中,它负责管理数据库连接的创建、分配和回收,确保...

    commons-dbcp-1.2.2.jar和commons-pool-1.3.jar包

    首先,Apache Commons DBCP(数据库连接池)是Apache软件基金会的一个开源项目,它提供了一个实现了Java Database Connectivity (JDBC) API的数据源类。数据源是JDBC中一个重要的概念,它允许开发者在应用中管理...

Global site tag (gtag.js) - Google Analytics