hibernet 和 mysql 连接的问题
等的时间很长,没有人访问,即没有使用连接,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)
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"/>