您的位置:首页 > 其它

C3P0整体类结构简单分析

2015-10-18 22:47 417 查看
直接进入主题吧:



这张图只是C3P0的部分结构类图,不急,先对总体上有一个了解。

首先我们需要了解,C3P0是“懒初始化”的。也就是说它并不会自己初始化,而是会等到第一个连接请求进来之后它才会初始化。而那个触发点就是:

ComboPooledDataSource.getConnection();


了解上面说的“懒初始化”之后,我们来介绍C3P0中几个主要的类:

ComboPooledDataSource

ComboPooledDataSource
: 和外界交互的类,主要负责

1. 设置连接池的配置

2. 获取连接

C3P0PooledConnectionPoolManager

C3P0PooledConnectionPoolManager
:连接池大管家,负责连接池的生命周期,并且提供一系列生命周期需要的生态环境:

1. 定时检测任务
AdminTaskTimer


2. 全局的线程池

C3P0PoolConnectionPool

C3P0PoolConnectionPool
:物理连接池对应的类,自身逻辑并不复杂,主要是通过委托给其代理的
ResourcePool
来实现“池”的逻辑

BasicResourcePool && BasicResourcePool.Manager

BasicResourcePool
ResourcePool
的实现类,抽象了一个“资源池”。刚才说到
C3P0PooledConnectionPoolManager
是管理连接池的生命周期的,那么
BasicResourcePool
就是管理池中连接的生命周期的。值得注意的是,
BasicResourcePool
并不是一个人在战斗,它还有一个小伙伴——
BasicResourcePool.Manager
来协助它一起管理池中的连接。


BasicResourcePool
中包含几个任务:

1. 创建数据库连接任务:
ScatteredAcquireTask
,取代了老版本的
AcquireTask


2. 销毁数据库连接任务:
RemoveTask
,这个任务应该不常用

3. 检测过期连接任务:
CullTask
,当检测到过期的连接时,则会去销毁这些连接

4. 验证空闲连接有效性任务:
CheckIdleResourcesTask
&&
AsyncTestIdleResourceTask
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c3p0