BasicDataSourceFactory 使用JNDI时用来创建 BasicDataSource
BasicDataSource
先创建一个ConnectionFactory (DriverConnectionFactory) 驱动连接工厂,通过加载driverClassName, Class.forName(driverClassName);
再根据url得到Driver, DriverManager.getDriver(url);
设置连接属性 connectionProperties 用户密码
创建一个DriverConnectionFactory,驱动连接工厂,其实就是物理连接的创建工厂,这里创建的都是真实的连接
真实连接创建工厂创建完之后,再来创建一个connectionPool用来存放连接,在这里 如果是要跟踪废弃的连接 则创建 AbandonedObjectPool 否则 GenericObjectPool
对对象池设置一些属性,如 最大连接数 最大空闲数 最小空闲数等
如果 isPoolPreparedStatements() 为true 表明会为预处理语句池化,则需要一个
GenericKeyedObjectPoolFactory,用来为预处理语句 创建一个一个对象池
物理连接创建工厂已经ok,连接池已经ok
此时 创建一个 PoolableConnectionFactory, 将 driverConnectionFactory connectionPool statementPoolFactory
创建一个 PoolableConnectionFactory, 这个对象将从driverConnectionFactory中获得连接,放入 connectionPool
PoolableConnectionFactory 这个对象对外不可见
获得连接通过 connectionPool 的 getConnection 来从池中取
使用 PoolingDataSource 对 connectionPool 包装
初始化池: 根据 initialSize 往 connectionPool 中添加指定个数的连接返回一个DataSource
所以:从BasicDataSource中取的一个连接经过:
PoolingDataSource.getConnection()
从connectionPool 中 borrow 一个连接 AbandonedObjectPool(connectionPool).borrowObject()
在创建PoolableConnectionFactory时 虽然没有返回PoolableConnectionFactory,但是会设置pool的connectionFactory
这样在pool getConnection()的时候,会由connectionFactory来负责,决定是 makeObject 还是激活钝化等等
在borrowObject时会根据需要决定时 创建一个新的或者是activateObject
在returnObject 回调用 addObjectToPool 将对象返回到池中
内部有一个Evictor TimerTask,会 根据 _timeBetweenEvictionRunsMillis 定时来钝化一些连接 (PoolableConnectionFactory.makeObject() 生产的连接 最终是 PoolingConnection 通过PoolableConnection返回)
PoolingDataSource将这个连接包装起来返回
AbandonedTrace用来跟踪被废弃的对象
连接包括一些其他对象 如 resultset statement 都需要继承这个类
Delegating的对象都是为了增加AbandonedTrace而产生不会改变原来的方法的行为 池化的功能不再这里实现
DelegatingConnection close方法会先调用 钝化方法 之后会关闭连接
DelegatingDatabaseMetaData
DelegatingResultSet DelegatingStatement DelegatingPreparedStatement DelegatingCallableStatement
PoolableConnection 继承 DelegatingConnection
PoolableConnection覆盖close()方法,这里close不会将连接真的关闭,poolable在这里实现
PoolableCallableStatement PoolablePreparedStatement 都是如此
PoolingConnection 会对 预编译语句pool
分享到:
相关推荐
commons-dbcp2-2.7.0.jar用于Java连接数据库的使用,方便操作,简化代码,对于新入手学习JDBC的朋友可以尝试使用,idea 用DBCP连接数据库时必备jar包
3. `commons-dbcp2-2.7.0-sources.jar`(如果存在):源代码文件,方便开发者查看和学习DBCP2的内部实现。 4. `commons-dbcp2-2.7.0-javadoc.jar`(如果存在):Java文档,提供了API的详细说明,有助于开发者理解和...
在"commons-dbcp-1.4-src.tar.gz"这个压缩包中,包含了DBCP 1.4版本的源代码,供开发者深入理解和学习。 DBCP的核心功能包括: 1. 连接池管理:DBCP通过创建一个池化的数据库连接集合,避免了每次请求数据库时都...
《Apache Commons DBCP2 2.0.1 源码分析》 Apache Commons DBCP2(DBCP第二版)是Apache...Apache Commons DBCP2 2.0.1作为一款成熟的数据库连接池组件,其源码对于学习Java数据库编程和并发控制具有很高的参考价值。
这些源代码可以用于学习、调试或定制DBCP以适应特定的项目需求。例如,开发者可以根据应用的并发需求调整连接池的大小,设置超时时间,或者添加自定义的验证和登录逻辑。 总的来说,Apache Commons DBCP是一个强大...
3. `commons-dbcp-1.4-sources.jar`:这个文件包含了DBCP 1.4的源代码,对于开发者来说,这是一个很好的学习和调试资源,可以查看源码了解内部实现细节。 4. `LICENSE.txt`、`RELEASE-NOTES.txt`、`README.txt`、`...
通过深入研究"commons-dbcp-1.2.2源码",开发者不仅可以了解数据库连接池的基本原理,还能学习如何优化数据库访问性能,以及如何处理数据库连接的异常和管理,这对于构建高效、稳定的企业级应用具有重要意义。...
DBCP(Database Connection Pool)是Apache组织提供的一个开源数据库连接池组件,它的全称为"Jakarta Commons DBCP"。...不过,对于理解数据库连接池的工作原理和使用,DBCP仍然是一个很好的学习起点。
1. **commons-dbcp-1.4.jar**: 这是DBCP 1.4版本的主库,包含了实现数据库连接池所需的所有类和接口。它提供了创建、管理和分配数据库连接的功能,以及执行基本的数据库操作如关闭连接、处理事务等。开发者可以通过...
1. **连接池管理**:DBCP能够创建和维护一个数据库连接池,当应用程序需要访问数据库时,可以从池中获取连接,而不是每次都创建新的连接。这减少了数据库的初始化和销毁开销,提高了性能。 2. **连接验证**:在连接...
1. **连接池管理**:DBCP管理一组数据库连接,将它们存储在一个池中,当应用程序需要时,可以从池中获取连接,用完后归还,而不是直接关闭。这样减少了数据库连接的创建和销毁,提高了系统效率。 2. **配置与初始化...
Apache Commons DBCP...通过深入学习DBCP1.4的源码,开发者不仅能理解连接池的工作原理,还能在遇到问题时更有效地定位和解决问题,从而提高应用的稳定性和效率。同时,这也是提升Java数据库编程能力的一个重要步骤。
1. **数据库连接池的概念与作用** - 数据库连接池是一种资源管理技术,预先初始化一定数量的数据库连接,应用程序需要时从池中获取,使用完毕后归还,而不是直接关闭,从而提高系统性能和资源利用率。 - DBCP通过...
这是学习JAVA过程中要用到的Jar包,学习jdbc的,请您注意版本信息。
1. 数据库连接池:DBCP的核心就是连接池,它管理着多个数据库连接,避免了每次操作数据库时创建和关闭连接的开销。连接池预先创建一定数量的连接,当应用程序需要时,可以从池中获取,用完后归还,而不是直接关闭。 ...
1. **apidocs**:这是API文档的目录,包含了关于DBCP 1.4的所有公共接口、类和方法的详细说明。开发者可以通过阅读这些文档来了解如何在他们的代码中使用DBCP,包括创建数据源、配置连接池以及处理数据库连接等操作...
1. `commons-dbcp2-2.6.0-bin`:这是DBCP2的二进制发行版,包含了编译后的jar文件,可以直接在项目中引用,用于实现数据库连接池的功能。 2. `commons-pool2-2.6.1-src`:Apache Commons Pool2的源代码,它是DBCP2...
1. **配置DBCP连接池**:需要设置数据库连接的基本属性,如数据库URL、用户名、密码,以及连接池的参数,如最大连接数、最小连接数、超时时间等。 2. **集成Midao JDBC**:在项目中引入Midao的相关依赖,然后可以...
源代码对于学习和调试DBCP的行为非常有帮助。 使用DBCP的主要步骤包括: 1. 添加依赖:将`commons-dbcp-1.4.jar`和`commons-pool-1.5.6.jar`引入项目。 2. 配置数据源:创建`dbcpconfig.properties`文件并配置相关...