本人用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
后经网上查找发现原因:
出现这种异常的原因是:Mysql服务器默认的“wait_timeout”是8小时,也就是说一个connection空闲超过8个小时,Mysql将自动断开该 connection。这就是问题的所在,在C3P0 pools中的connections如果空闲超过8小时,Mysql将其断开,而C3P0并不知道该connection已经失效,如果这时有 Client请求connection,C3P0将该失效的Connection提供给Client,将会造成上面的异常。
自己测试了一下,在mysql 的配置文件my.ini中在
[mysqld]下添加
wait_timeout=100 服务器关闭交互式连接前等待活动的秒数
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 小荷初现)
有没有更好的方法,请各位指点一下
分享到:
相关推荐
解决:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after statement closed.
使用mysql+cp30连接池时,报错No operations allowed after connection closed。从报错信息来看,是connection断开导致的错误。在网上搜索后发现,较新版本的mysql配置了connection的默认时间,默认时间一般为8个...
java.sql.SQLException: Operation not allowed after ResultSet closed java.sql.SQLException: QueryRunner requires a DataSource to be invoked in this way, or a Connection should be passed in
import cycle not allowed(解决方案).md
设置隐试打开PPT报错 Hiding the application window is not allowed
Android WebView 报 Not allowed to load local resource错误的解决办法 博客地址:http://blog.csdn.net/yuzhiqiang_1993/article/details/76228541
8. 结果集已关闭:`java.sql.SQLException: Operation not allowed after ResultSet closed`提示在结果集关闭后尝试访问数据,确保在适当的时间点关闭并处理结果集。 9. 类型错误:`Data truncated for column '...
File size exceeds the maximum allowed limit(解决方案).md
Method Not Allowed(解决方案).md
File Type Not Allowed(解决方案).md
标题 "Host 'localhost' Not Allowed To Connect To Server" 是一个常见的MySQL服务器错误,通常发生在尝试从本地主机连接到数据库服务时被拒绝的情况。这个错误意味着MySQL服务器的配置没有正确地允许来自localhost...
operation_not_allowed_error解决办法.md
标题与描述均提到了"Informix Point in Time Table Level Restore",这涉及到IBM Informix数据库管理系统中的一个高级恢复特性——即点对点时间表级恢复(Point in Time Table-level Restore)。...
$ npm install is-retry-allowed 用法 import isRetryAllowed from 'is-retry-allowed' ; isRetryAllowed ( { code : 'ETIMEDOUT' } ) ; //=> true isRetryAllowed ( { code : 'ENOTFOUND' } ) ; //=> false ...
前端项目-jquery.allowed-chars,jQuery plugin to restrict users for typing only allowed chars for specified element
### Keil 编译器常见错误解析与解决方案 #### 一、Warning 280: ‘i’: unreferenced local variable **问题描述**:在编译过程中出现警告信息“Warning280: ’i’: unreferenced local variable”,表明在函数内部...
在SQL Server安装过程中,有时会遇到“安装挂起”错误,这通常是由于多种原因引起的,如系统不兼容、缺少依赖组件、安装过程中网络中断或安装文件损坏等。本指南将详细解析这一问题,并提供解决方案。 首先,确保您...
Temperature中,我们可以看到E1114 Temp Ambient错误代码,该错误代码表示ambient temperature has a reached a point outside of the allowed range。在这种情况下,管理员需要等待温度返回到允许的范围内。 ...
标题中的"NR5G网络拒绝码-5gmm_cause = 27 (0x1b) (N1 mode not allowed)"是指5G NR(New Radio)网络在服务请求或去注册请求过程中遇到的一种特定错误情况。这个拒绝码是5G移动管理(5GMM)中的一个原因值,用来...