hibernet 和 mysql 連接的問題

chyx413332087 13年前發布 | 2K 次閱讀
  等的時間很長,沒有人訪問,即沒有使用連接,mysql會單方面,關閉連接,而hibernet依然保值連接有效,當再來訪問的時候,就會出現
java.net.SocketException: Software caused connection abort: socket write error
 at java.net.SocketOutputStream.socketWrite0(Native Method)
 at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
 at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
 at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65)
 at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123)
 
因此,在網上查了一下,
1:是設置mysql空閑連接的 默認時間,設置長一點
2:修改hibernet的配置 文件,過一段時間,就去test一下連接
最近用 Hibernate 3 連接 Mysql 4 數據庫。
調試時都還好,真正發布的時候毛病來了。

使用的框架是 hibernate3 + spring

原來這個項目都是用的時候才連接Mysql,最近挪到服務器上了,處于一直打開服務的狀態,就出現了java.net.SocketException: Software causedconnection abort: socket write error  這個異常

在網上找了一下,都說是因為Mysql服務器默認的“wait_timeout”是8小時,也就是說一個connection空閑超過8個小時,Mysql將自動斷開該 connection。這樣就出現了上面這個問題。

網上的解決方法有幾種:

第一種:在mysql安裝目錄下找到my.ini文件中添加超時限制:在該文件最后添加一行:wait_timeout=2880000。這樣把之前的超時限制把8小時(28800)擴大為800小時。這樣重啟了mysql后再在其中輸入命令:show global variables like "wait_timeout";查看超時是否已修改為:2880000。

重啟tomcat(如果已啟動),OK

第二種,通過c3p0的idleConnectionTestPeriod來控制

可以將它的值設定的比Mysql的默認wait_timeout小就行了

<property name="idleConnectionTestPeriod" value="18000"/>

 
 本文由用戶 chyx413332087 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!