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)

closeConnectionExecutor關閉連接后,會調用fillPool()方法對連接池進行連接填充。

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


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM