環境
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