Druid監控數據庫連接

環境

192.168.90.29 LLH2/LLH2 Oracle數據庫

目的

研究oracle賬戶鎖定,解鎖效果

alter user LLH2 account lock;

alter user LLH2 account unlock;

步驟

步驟一

執行 alter user LLH2 account lock; 鎖定賬戶

啓動druid測試工程,獲取連接(http://192.168.70.132:9092/druid/getConnection)

70.132是我本機爲了獲取數據庫連接寫的一個接口,用來測試是否能正常獲取鏈接。

代碼分析

DruidDataSource.getConnection

首先調用init()方法,查看是否初始化

創建物理連接:

創建連接失敗,因爲賬戶被鎖

因爲finally中inited=true,所以下一次不會再創建物理連接(即使賬戶解鎖)

步驟二

alter user LLH2 account unlock; 執行解鎖賬戶

調用URL,獲取連接 http://192.168.70.132:9092/druid/getConnection

代碼分析

Init()方法不再執行

沒有設置過濾,直接獲取池中連接

獲取池中連接失敗

分析getConnectionInternal()方法:

在此處獲取連接

繼續進入分析pollLast()方法,返回null

回到上一個方法,獲取連接失敗,拋出異常

所以網絡上那些什麼校驗連接壓根無效

 

 

connections數組新增連接有兩個地方,init()和

com.alibaba.druid.pool.DruidDataSource.CreateConnectionThread

init方法暫且不表,且看 CreateConnectionThread。

此處創建了線程,結果還是在init方法中

第一次啓動使用連接池是沒有,啓動這個線程監測連接的

進入此Thread會發現,這是等待連接的線程,並不是連接錯誤後檢測連接的線程。

當然也可以自己設置,設置的方法在此,是父類中的

設置此定時器是爲了在沒有連接時可以提交Task來創建連接。

附上測試代碼:https://github.com/ivan123king/LocalProject/tree/master/druid

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章