2016-09-13 55 views
0

的HikariCP文件說:如何在拋出SQLTransientConnectionException時知道我的HikariCP池是否真的耗盡?

connectionTimeout:此屬性控制毫秒客戶端將等待從池中的連接的最大數目。如果在沒有可用連接的情況下超過此時間,則會拋出SQLException。

通過測試,我看到SQLTransientConnectionException在這種情況下拋出。

如果我的游泳池耗盡,我會得到這個例外。 如果我的數據庫主機與網絡斷開連接,則會發生此異常。 如果我的數據庫實例服務停止,我得到這個異常。

問題是,不管什麼原因,池總是會拋出這個異常與相同的消息。

這樣我就不能通知用戶發生了什麼事情。如果游泳池真的耗盡(負荷很重的正常情況),應該通知用戶並要求稍後再試。

但是,如果我的數據庫服務器關閉,這是一個不同的故事,並應該相應地通知用戶。

回答

0

檢查yourException.getNextException()或yourException.getCause(),如果它不爲null通常意味着網絡/數據庫問題。

注意:Hikaricp不保留此例外情況。 getNextException()/ getCause()對於下一次失敗的getConnection()調用可能爲空。

https://github.com/brettwooldridge/HikariCP/issues/719報告了此事,Brett立即做出了改變。

+0

他改變了一件事,但沒有改變另一件事。這夠了嗎? – Gustavo

+0

隨着這種變化,你應該能夠取得進步。 如果您面臨超時例外,並且出現下一個例外,但連接創建失敗,請報告'719' 我希望這是可以接受的答案 – Nitin

相關問題