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

DBCP原理分析

阅读更多

数据库连接池多种多样,不得不提到的是代码短小精悍性能又不错的commons-dbcp。

首先看一下官网对于dbcp里面的所有包的介绍:

org.apache.commons.dbcp: database connection pool API

org.apache.commons.dbcp.cpdsadapter: contains the a class ConnectionPoolDataSource (CPDS) implementation can be used to fit the old jdbc implementation based on the drive.

org.apache.commons.dbcp.datasources: contains two data sources: PerUserPoolDataSource, and SharedPoolDataSource, data connection pool.

org.apache.commons.jocl: java object configuration language, an XML application used to describe the java object to be instantiated.

 

操作一个典型的关系型数据库应用的基本步骤

a. 建立连接
b. 执行数据库操作
c. 关闭连接

这样的过程对于一个大访问量的程序来说,频繁的建立连接,断开连接会带来性能瓶颈。所以数据库连接池(Database Connection Pool)应势而生。

 

下面来看一下DBCP原理
用户使用数据库连接池流程:
a. 从连接池中获取一个连接(如果有已建立空闲的连接,直接获取连接,否则建立新连接)
b. 执行数据库操作
c. 将连接归还给数据库连接池

这样就避免了每次连接数据库需要消耗的时间。(PS: 又是一个以空间换时间的案例)

原理说起来简单,不过还是有许许多多的艺术在里面的,比如,过期销毁,被破坏时销毁,超过连接池大小时销毁,没有空闲的连接时等待等系列问题。我们就来看看DBCP的developer们是如何实现DBCP连接池的。

 

 DBCP中有许多标志性的类,其实每个框架都一样,几个核心的承重类去支撑起了整个框架。我们要认识的第一位他是BasicDataSource


                                                            
 BasicDataSource 的实例来自于BasicDataSourceFactory的创建,BasicDataSource里面封装了连接数据库需要的一些内容。开始迷茫BasicDataSource 和PoolingDataSource是什么关系呢,后来跟源码发现,原来用BasicDataSource 其实就是在用PoolingDataSource了。

第二位即将登场ConnectionFactory


                                             

为DataSourceConnection, DriverConnection, DriverManagerConnection三个Factory提供更高的抽象层。

 

PoolingDataSource(这个不用介绍了哈,就是一个DataSource,从图中也可以看出,只不过是这个DataSource不光提供Connection,还封装了ObjectPool而已。

 



 

PoolingConnection,第一反应一定是,不就是个Connection 嘛,它的不同之处就在于该Connection可以提供PoolablePreparedStatement(使得PreparedStatement处于池中,可复用),就断他获取了PreparedStatement,也不是每次都新建一个,而是通过操作池中对象答道复用的效果。这样就完成了整个Pool中的内容可最大化重用的功能。



 

Delegating,个人觉得这张图把整个架构描述得清晰到爆啊,PoolableConnection可以说是在辅助PoolingConnection的功能,因为PoolableConnection中的close方法是将当前的Connection是通过returnObject放回到池中。同时我们清晰的看到Delegating层的作用,以及几种Connection,PreparedStatement,ResultSet之间的关系。



 

AbandonedObjectPool,这是一个存放废弃的连接的连接池其中AbandonedConfig用于配置废弃连接策略,AbandonedTrace用于记录恢复和报告db Connection 的使用情况。



 


 这就是整个DBCP的框架以及原理分析,现在对于DBCP有个整体上的认识了,接下来会陆续跟踪源码,分析DBCP开发者们每个细节的处理。

由于开发经验和能力有限,如果上文中有哪些地方说的不正确,欢迎批评,指出,希望可以通过开源的媒介多交流。

Email zqxjqka@gmail.com

  • 大小: 15.7 KB
  • 大小: 5.5 KB
  • 大小: 45.3 KB
  • 大小: 36.3 KB
  • 大小: 34.6 KB
  • 大小: 22.1 KB
分享到:
评论

相关推荐

    DBCP连接池原理分析

    DBCP连接池介绍 ----------------------------- 目前 DBCP 有两个版本分别是 1.3 和 1.4。 DBCP 1.3 版本需要运行于 JDK 1.4-1.5 ,支持 JDBC 3。 DBCP 1.4 版本需要运行于 JDK 1.6 ,支持 JDBC 4。 1.3和1.4基于...

    commons-dbcp2-2.9.0-bin.zip

    DBCP的工作原理是,程序首先会初始化相应的数据库连接池,以供程序访问,当某个操作需要访问数据库时,程序会首先在连接池中取得空闲连接,如没有空闲连接在创建,用完之后归还连接池,这样达到了连接的重利用,不用...

    开发工具 commons-dbcp2-2.1.1

    开发工具 commons-dbcp2-2.1.1开发工具 commons-dbcp2-2.1.1开发工具 commons-dbcp2-2.1.1开发工具 commons-dbcp2-2.1.1开发工具 commons-dbcp2-2.1.1开发工具 commons-dbcp2-2.1.1开发工具 commons-dbcp2-2.1.1开发...

    创建dbcp连接,dbcp(Spring)

    创建dbcp连接,dbcp(Spring)

    DBCP依赖Jar包

    DBCP的依赖Jar包,完整的,亲测能用,欢迎下载!DBCP的依赖Jar包,完整的,亲测能用,欢迎下载!

    commons-dbcp-1.4-API文档-中英对照版.zip

    赠送jar包:commons-dbcp-1.4.jar; 赠送原API文档:commons-dbcp-1.4-javadoc.jar; 赠送源代码:commons-dbcp-1.4-sources.jar; 赠送Maven依赖信息文件:commons-dbcp-1.4.pom; 包含翻译后的API文档:commons-...

    DBCP连接池DBCP和C3P0配置

    DBCP连接池DBCP和C3P0配置,可以对数据源进行各种有效的控制

    commons中的DBCP连接池jar

    commons中的DBCP连接池jar,用于利用dbcp链接数据库

    dbcp所需要jar

    SpringMVC链接mysql数据库,配置需要用到的两个包class="org.apache.commons.dbcp.BasicDataSource

    commons-dbcp-1.2.2

    commons-dbcp-1.2.2 commons-dbcp-1.2.2 commons-dbcp-1.2.2

    commons-dbcp.jar.rar

    commons-dbcp.jar dbcp数据库连接池驱动,包括pool、logging两个依赖

    dbcp jar包 dbcp jar 包

    dbcp jar包 一个是dbcp的包, 一个是pool包, 两者都导入工程

    DBCP数据库连接池包下载

    DBCP

    commons-dbcp-1.4

    commons-dbcp-1.4,到官网下载慢到抽筋,传这里来了。

    commons-dbcp

    commons-dbcp-1.3-javadoc.jar, commons-dbcp-1.3-RC1.jar, commons-dbcp-1.3-sources.jar, commons-dbcp-1.3.jar, commons-dbcp-1.4-javadoc.jar, commons-dbcp-1.4-sources.jar, commons-dbcp-1.4.jar, commons-...

    commons-dbcp-1.4.jar

    DBCP是Apache提供的一款开源免费的数据库连接池!Hibernate3.0之后不再对DBCP提供支持!因为Hibernate声明DBCP有致命的缺欠!DBCP因为Hibernate的这一毁谤很是生气,并且说自己没有缺欠。

    DBCP1.4.chm

    DBCP1.4.chm帮助文档,更好地理解和掌握dbcp数据库连接池。

    DBCP(数据库连接池)

    DBCP 数据库连接池 DBCP 数据库连接池 DBCP 数据库连接池 里面是DBCP的jar,导进去就可以用了

    DBCP数据源jar包.rar

    DBCP数据源jar包 DBCP数据源jar包 DBCP数据源jar包 DBCP数据源jar包 DBCP数据源jar包 DBCP数据源jar包

    开源数据库连接池dbcp

    开源数据库连接池dbcp及其文档

Global site tag (gtag.js) - Google Analytics