2017-06-28 29 views
0

從C3P0 documentationc3p0連接或者辦理入住或退房手續

對於一些應用,高性能比一個偶然的數據庫異常的 風險更重要。在其默認 配置中,c3p0完全不進行連接測試。設置一個 相當長idleConnectionTestPeriod,並在所有的結賬 和簽入未測試是一個優秀的,高性能的方法。

如果我理解正確的C3P0配置屬性的含義,如果數據庫成爲的短時間內無法再恢復(例如,它重新啓動或出現網絡問題),如果有一個相當這是在C3P0集中,以便沒有連接空閒超過idleConnectionTestPeriod長連接的高使用率,那麼所有這些連接都不會被用於有效性和所有試圖使用它們將是不成功的測試。基本上,連接池不會自動從數據庫不可用性恢復。

在文檔中說明這個是一種優秀的高性能方法,但沒有警告連接池失去了從無效連接中自動恢復的能力,或者我誤解了相關的配置屬性?

回答

1

呵呵。我寫這個,大概十多年前,你說得對,這不是好建議。原來,在C3P0連接測試往往是非常昂貴的(因爲DBMS /驅動程序的獨立和完整的有效性測試的確定性,它使用了昂貴的元數據的getTables(...)測試),我強烈建議人們一定要異步測試,在簽入和閒置測試。一旦preferredTestQuery,然後jdbc4 Connection.isValid()使可能的高效可靠測試,我修改了文檔,以消除同步檢查的灰心。但顯然這仍然存在,甚至在過去也是一個壞建議。在實踐中,如果你不結帳時測試,我建議上籤閒置測試,並適度頻繁的怠速測試(30秒上下的)兩個異步測試通常,減少的可能性的應用程序可以看到陳舊的連接和之前的延遲連接中斷後刷新。

我會修改這個前進。謝謝你的收穫。