這可能會是一個可怕的SO問題,因爲只能提供很少的信息。 當我們在MySQL中使用Slick 1.0.1時,我們得到了一個java.sql.SQLException: Operation not allowed after ResultSet closed
,它看起來像是隨機時間。java.sql.SQLException:在使用Slick 1.0.1時ResultSet關閉後不允許操作
我查了一下這個異常,似乎它發生的原因是因爲ResultSet被提前關閉,或者多個ResultSets是由同一個Statement對象(見Getting java.sql.SQLException: Operation not allowed after ResultSet closed)生成的。
現在的問題是我使用的是Slick,所以ResultSet的整個想法都被抽象出來了。我不能真正向你展示任何代碼,因爲我不知道問題發生在哪裏(當它發生時,堆棧跟蹤指向代碼的不同部分。非常多,在試圖訪問代碼的隨機部分DB,它會失敗)。
沒有真正做到瘋狂的事情,只是用Session和withTransaction以及Session.withTransaction的。 C3P0提供連接。
我們已經能夠注意到發生在3次調用中。這3個電話的共同之處在於它們有些長期運行(它們在同一個會話中對數據庫進行了大約3-5次調用,這是不是很糟糕?)。
有沒有人在Slick 1.0.1中看到過這種錯誤?我知道有一個Slick 2.0,但我們還沒有準備好升級到那個版本(除非有人告訴我這是2.0版中的一個bug)。
謝謝。
編輯:關於一些更多的信息:
SHOW VARIABLES LIKE '%_TIMEOUT';
在3調用一些信息:
呼叫1:
- 3至5讀取(2讀取是可選的)
- 2寫入
呼叫2:
- 4閱讀(我剛剛注意到,這些是4大讀。跨越幾個連接)
- 沒有寫
呼叫3(只注意到失敗的這一呼籲的數量近來下降):
- 2讀取
- 2寫道:
你可以添加關聯號碼到「some-what long running」以及一般描述爲神祕的'3調用'採取的行動(插入,選擇等)的種類?另外 - 你可以發佈什麼'SHOW VARIABLES LIKE'%_timeout';'報告mysql? – n0741337
@ n0741337我已經添加了關於mysql實例的調用和變量的更多信息。 – Nacht
在C3P0側,確保了C3P0的配置參數'unreturnedConnectionTimeout'或者未設置(其值應爲0),其他的設置爲大到足以容納你的運行時間最長的查詢的值。 'unreturnedConnectionTimeout'對於泄漏連接的解決方案應用程序來說是一種醜陋的破解;如果連接停留時間過長,它將關閉連接。 [見http://www.mchange.com/projects/c3p0/#unreturnedConnectionTimeout http://www.mchange.com/projects/c3p0/#configuring_to_debug_and_workaround_broken_clients] –