C3P0整体类结构简单分析

直接进入主题吧:
这里写图片描述

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

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

ComboPooledDataSource.getConnection();

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

ComboPooledDataSource

ComboPooledDataSource: 和外界交互的类,主要负责
1. 设置连接池的配置
2. 获取连接

C3P0PooledConnectionPoolManager

C3P0PooledConnectionPoolManager:连接池大管家,负责连接池的生命周期,并且提供一系列生命周期需要的生态环境:
1. 定时检测任务AdminTaskTimer
2. 全局的线程池

C3P0PoolConnectionPool

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

BasicResourcePool && BasicResourcePool.Manager

BasicResourcePoolResourcePool的实现类,抽象了一个“资源池”。刚才说到C3P0PooledConnectionPoolManager是管理连接池的生命周期的,那么BasicResourcePool就是管理池中连接的生命周期的。值得注意的是,BasicResourcePool并不是一个人在战斗,它还有一个小伙伴——BasicResourcePool.Manager来协助它一起管理池中的连接。
BasicResourcePool中包含几个任务:
1. 创建数据库连接任务:ScatteredAcquireTask,取代了老版本的AcquireTask
2. 销毁数据库连接任务:RemoveTask,这个任务应该不常用
3. 检测过期连接任务:CullTask,当检测到过期的连接时,则会去销毁这些连接
4. 验证空闲连接有效性任务:CheckIdleResourcesTask&&AsyncTestIdleResourceTask

<script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); }); </script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值