程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C3P0整體類結構簡單分析

C3P0整體類結構簡單分析

編輯:關於C++

直接進入主題吧:
這裡寫圖片描述

這張圖只是C3P0的部分結構類圖,不急,先對總體上有一個了解。

首先我們需要了解,C3P0是“懶初始化”的。也就是說它並不會自己初始化,而是會等到第一個連接請求進來之後它才會初始化。而那個觸發點就是:<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwcmUgY2xhc3M9"brush:java;"> 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

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved