Druid連接池號稱是爲了監控而生的連接池,監控很重要,但像Druid這麼過分的監控,我真是有點蒙圈,感覺稍微有點過度設計的味道。
先來看下Druid連接池對象的關係:
簡單來說,數據源對象持有一個數組connections,數組存儲的對象是DruidConnectionHolder,線程每次取連接的時候,都是先從connections數組中取最後一個連接,然後組裝成DruidPooledConnection對象返回。
連接生成邏輯是先創建一個PhysicalConnectionInfo對象,再拿這個對象構造DruidConnectionHolder對象,再把DruidConnectionHolder對象放進connections數組。
Druid基本流程:
Druid創建連接有兩種方式:
- 1、連接池 - ScheduledExecutorService
這種方式貌似不是默認的,如果要使用這種方式,需要配置:
<property name="createScheduler" value="" />
- 2、守護線程
如果沒有配置連接池,在初始化連接池的時候就會把守護線程起起來,然後通過java Conditon來控制線程什麼時候創建連接。