一、错误日志:
程序运行正常,控制台偶尔出现如下错误:
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,进行验证。