1. 程式人生 > >c3p0連線池checkoutTimeout

c3p0連線池checkoutTimeout

       開始程式執行Hibernate呼叫資料庫查詢的時候,隔一段時間會掛死,以至於連線該資料庫的所有操作都無法執行。

懷疑是oracle分頁查詢的問題,網上也確實有說,分頁排序需要新增主鍵或唯一鍵,不然導致分頁重複記錄,問題不在這。

優化c3p0配置引數,開始設了最大連線數100(後面發現這是導致為什麼程式需要執行一段時間之後才掛死的原因之一),新增<property name="checkoutTimeout">100</property>,即:程式從連線池checkout session的時候
等待100毫秒,超時則丟擲異常;後面程式不會出現掛死現象,只是資料庫的操作永遠不會成功,都是
checkoutTimeout異常。網上很多關於這個問題的說發:

1.c3p0和oracle相容性不好換proxool;

2.spring的事務管理不能使用;

3. 設定unreturnedConnectionTimeout,使checkout的session超時強行回收。

最後分析得出:應該是最大session數都被用完了,沒有正常返回連線池;如果有類似的情況,請檢查自己的程式:1.是不是所有呼叫資料庫的操作都session.close();2.使用事務管理的,對所有資料庫的操作都註明有@Transactions。程式經過排查後恢復正常。

另外:資料庫的session最大連線數5個就夠用了,上面設定100無形中給除錯增加了難度。
轉載自:https://blog.csdn.net/renshenguo/article/details/44398775