一、錯誤日誌:
程序運行正常,控制檯偶爾出現如下錯誤:
Caused by: java.net.SocketException: Software caused connection abort: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(Unknown Source)
at java.net.SocketOutputStream.write(Unknown Source)
at java.io.BufferedOutputStream.flushBuffer(Unknown Source)
at java.io.BufferedOutputStream.flush(Unknown Source)
at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3832)
... 19 more
或者
Caused by: java.net.SocketException: Software caused connection abort: recv failed
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(Unknown Source)
at com.mysql.jdbc.util.ReadAheadInputStream.fill(ReadAheadInputStream.java:113)
at com.mysql.jdbc.util.ReadAheadInputStream.readFromUnderlyingStreamIfNecessary(ReadAheadInputStream.java:160)
at com.mysql.jdbc.util.ReadAheadInputStream.read(ReadAheadInputStream.java:188)
at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1953)
二、錯誤原因:
MySQL默認的空閒等待時間是8個小時(8 x 60 x 60 = 28800),也就是28800秒,一旦空閒超過8個小時,就會拋出異常。將MySQL默認的空閒等待時間設置爲80小時,就沒問題了。
三、解決方案:
1.查看數據庫interactive_timeout、wait_timeout兩個屬性的值:
show global variables like "interactive_timeout";
show global variables like "wait_timeout";
或打開my.ini查看兩個屬性的值,看是否是默認值8小時,即28800(s)
2.打開Mysql的安裝路徑,找到文件my.ini修改如下屬性。
wait_timeout=288000
interactive_timeout=288000
3.重啓mysql服務。
重啓mysql服務後,執行步驟1操作,看interactive_timeout、wait_timeout兩個屬性的值是否改好了。
4.重啓eclipse或tomcat,進行驗證。