1. 程式人生 > >Hikaricp原始碼解讀(5)——物理連線生命週期介紹

Hikaricp原始碼解讀(5)——物理連線生命週期介紹

5、物理連線生命週期介紹

HikariCP中的連線取用流程如下:
連線取用流程

其中HikariPool負責對資源連線進行管理,而ConcurrentBag則是作為物理連線的共享資源站,PoolEntry則是對物理連線的1-1封裝。

PoolEntry通過borrow方法從bag中取出,之後通過PoolEntry.createProxyConnection呼叫工廠類生成HikariProxyConnection返回。

連線放回流程
HikariProxyConnection呼叫close方法時呼叫了PooleEntry的recycle方法,之後通過HikariPool呼叫了ConcurrentBag的requite放回。(poolEntry通過borrow從bag中取出,再通過requite放回。資源成功回收)。

HikariCP中的連線生成流程如下:
連線生成流程

HikariCP中通過獨立的執行緒池addConnectionExecutor進行新連線的生成,連線生成方法為PoolEntryCreator。

物理連結的生成只由PoolBase的newConnection()實現,之後封裝成PoolEntry,通過Bag的add方法加入ConcurrentBag。

當ConcurrentBag存在等待執行緒,或者有連線被關閉時,會觸發IBagItemListener的addBagItem(wait)方法,呼叫PoolEntryCreator進行新連線的生成。

HikariCP中的連線關閉流程如下:
連線關閉流程

HikariCP中通過獨立的執行緒池closeConnectionExecutor進行物理連線的關閉。出現以下三種情況時會觸發連線的自動關閉:
1. 連線斷開;
2. 連線存活時間超出最大生存時間(maxLifeTime)
3. 連線空閒時間超出最大空閒時間(idleTimeout)

同時HikariPool提供evictConnection(Connection)方法對物理連線進行手動關閉。

以下是簡要的整理連線變化導向圖
導向圖