2015-11-04 30 views
2

重新啓動幾次後,實現自己的數據庫連接池我終於決定給c3p0一試。一旦你閱讀了文檔,它似乎很容易使用和配置。c3p0:檢測db down/up事件

在文檔中找不到的一件事是如何通過偵聽器或其他機制檢測db何時關閉或使用c3p0。在我們的應用程序中,我需要告訴客戶端數據庫已關閉,因此無法發送某些需要在數據庫中記錄的訂單。我想知道是否有一個標準的方法來檢測這些使用c3p0的變化,或者我必須實現一個外部線程,通過執行簡單的select語句來定期查詢數據庫。

我覺得這個功能在連接池中是必須的,並且必須有一種方法來使用c3p0,但我無法找到它。如果這不存在,我覺得再次重新發明輪子。

+0

你應該給[Hikari](https://github.com/brettwooldridge/HikariCP)一個嘗試。 – Stefan

+0

它沒有javadoc或API文檔,或者至少我找不到它。這對我來說並不嚴肅。 –

+0

它是一個maven項目。它會創建文檔時,它是... – Stefan

回答

2

連接池無法知道數據庫的狀態或連接的狀態,直到對它們執行某些操作爲止。至少有一些連接池可以配置爲在一定時間後重新創建連接,因此該池在那時會注意到有什麼問題。還有其他一些機制,比如在連接發出之前執行的測試查詢,以驗證連接是否有效。

如果你想跟蹤狀態,你別無選擇,只能自己查詢數據庫。

+0

嗯......這將是一個很好的功能。一個監聽器,告訴你數據庫是打開還是關閉。如果數據庫關閉,IMO,最好排隊數據庫請求並在知道數據庫已啓動時執行它們,而不是試圖執行它們來捕獲異常並一次又一次地重試執行。 –

+0

這就是監控系統的用途。他們輪詢不同的服務器以查看它們是否正常運行。一旦數據庫重新啓動,排隊請求並執行它們也絕不是一個好主意。雖然這可能在非常簡單的情況下起作用,但它會在現實世界的情況下搞亂交易和破壞數據。 – Kayaman

+0

我收到了來自devide的一些數據測量結果,它們必須全部存儲在歷史數據庫中。如果應用程序已收到它,則不會有任何措施丟失。要做到這一點的唯一方法是在數據庫關閉時排隊插入數據,並在數據庫重新啓動時執行它們。請告訴我,如果你能想到更好的方法。 –