本人用struts+jDBC+tomcat+mysql 做了个小型网站,刚开始挂上去时没有问题,等过三天左右就会报No operations allowed after connection closed.错误
报错如下:javax.servlet.ServletException: java.sql.SQLException: No operations allowed after connection closed.
Connection was closed due to the following exception:
** BEGIN NESTED EXCEPTION **
java.sql.SQLException
MESSAGE: Communication link failure: java.net.SocketException, underlying cause: Software caused connection abort: recv failed
** BEGIN NESTED EXCEPTION **
java.net.SocketException
MESSAGE: Software caused connection abort: recv failed
后经网上查找发现原因:
interactive_timeout=100 服务器关闭非交互连接之前等待活动的秒数
两个参数,即将mysql默认的链接等待时间由8小时改为100秒,登录网站,确实有如上错误出现。
解决方案:1、换一下JDBC驱动,JDBC3.1.0-alpha及以前版本会出现此问题,下载新的JDBC驱动
2、使用hibernate配置:
使用hibernate:
<property name="connection.autoReconnect">true</property> <!--这个是最主要的-->
<property name="connection.autoReconnectForPools">true</property>
<property name="connection.is-connection-validation-required">true</property>
加入以上property,可解决此问题,如果未使用hibernate等持久化管理框架,可在mysql的url中加入autoReconnect=true,这样就可以解决(源自iteye 信仰的力量)
抱歉上述方法可行性有问题,现改变:
原因很简单。在对数据库操作结束后关闭连接是正确的做法,没什么大问题。至于出现:No operations allowed after connection closed。这样的问题原因只有一个,你这里和数据库的连接Connection是一个Static的,程序共享这一个Connection。所以第一次对数据库操作没问题,当把Connection关闭后,第二次还想操作数据库时Connection肯定不存在了。(源自CSDN 小荷初现)
有没有更好的方法,请各位指点一下