项目部署后第二天报错:MySQL数据路连接异常

我的项目用的是MySQL数据库,部署到服务器上后,第二天就报这个错误,哪位大神有解决办法,
[2018-04-27 09:38:48] [http-bio-8080-exec-5] [ERROR] com.manage.controller.appcontrol.AppUserController :手机号登录验证异常:com.manage.exception.AtomException:

Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed.

The error may exist in file [/usr/tomcat/apache-tomcat-7.0.82/webapps/Tophotoart/WEB-INF/classes/com/manage/dao/mapper/TopUserMapper.xml]

The error may involve com.manage.dao.TopUserMapper.getAppExternalUser

The error occurred while executing a query

SQL: SELECT us.userId,us.nickname,us.realName, us.sexId, us.birthday,us.avatar,us.phone FROM topuser AS us WHERE us.userType=0 and us.phone=?

Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed.

; SQL []; No operations allowed after connection closed.; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed.
[com.manage.controller.appcontrol.AppUserController] [手机号登录验证异常:com.manage.exception.AtomException:

Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed.

The error may exist in file [/usr/tomcat/apache-tomcat-7.0.82/webapps/Tophotoart/WEB-INF/classes/com/manage/dao/mapper/TopUserMapper.xml]

The error may involve com.manage.dao.TopUserMapper.getAppExternalUser

The error occurred while executing a query

SQL: SELECT us.userId,us.nickname,us.realName, us.sexId, us.birthday,us.avatar,us.phone FROM topuser AS us WHERE us.userType=0 and us.phone=?

Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed.

; SQL []; No operations allowed after connection closed.; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed.]

11个回答

不行就试试这个,

     <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="${database.driver}"/>
        <property name="jdbcUrl" value="${database.url}"/>
        <property name="user" value="${database.username}"/>
        <property name="password" value="${database.password}"/>
        <property name="minPoolSize" value="1"/>
        <property name="maxPoolSize" value="20"/>
        <property name="maxIdleTime" value="1800"/>
        <property name="acquireIncrement" value="2"/>
        <property name="maxStatements" value="0"/>
        <property name="initialPoolSize" value="2"/>
        <property name="idleConnectionTestPeriod" value="1800"/>
        <property name="acquireRetryAttempts" value="30"/>
        <property name="breakAfterAcquireFailure" value="true"/>
        <property name="testConnectionOnCheckout" value="false"/>
    </bean>

这个字面的意思是链接关闭后不能再操作数据库了,问题具体原因还得看代码。
看楼主用的具体框架,以及对应的代码操作数据库部分是怎么写的。

jt_s8645
jt_s8645 项目用的是ssm框架,其他接口也会报这个错误,每次重启项目就好了,网上很多说是MySQL在8小时没有操作后会自动关闭连接,不知道是不是这个问题,有没有解决办法?谢谢!
2 年多之前 回复

无人操作 MySQL自动把链接关闭了?

jt_s8645
jt_s8645 的确,报的就是这个错误
2 年多之前 回复

TopUserMapper.xml是逆向生成的还是手动写的?手动的话认真检查有没写错某些地方,逆向的话看看TopUserMapper.getAppExternalUser()这个方法里面有没某些细节出错了,还有,看看配置文件

jt_s8645
jt_s8645 回复jt_s8645: 那个配置文件?
2 年多之前 回复
jt_s8645
jt_s8645 这个是手写的xml,你要看那个配置问加你
2 年多之前 回复

你吧数据库关了再重新打开啊

分析如下:
1、看看其他的功能是否可以操作。
2、如果其他的功能可以操作,检查你的脚本是否有问题,直接在mysql的客户端上执行,看是否脚本有问题
3、如果其他功能都抱数据库联接断开,请检查自己的程序进行断点跟踪一下。

jt_s8645
jt_s8645 这个问题只有在数据库长期没有操作的情况下会发生
2 年多之前 回复

报错是在执行SELECT查询时发生的,所以基本可以定位到这句,然后导致MySQLNonTransientConnectionException,官方认可说法,之所以会出现这个异常,是因为Mysql在5以后针对超长时间DB连接做了一个处理,那就是如果一个DB连接在无任何操作情况下过了8个小时后,Mysql会自动把这个连接关闭。所以使用连接池的时候虽然连接对象还在但是链接数据库的时候会一直报这个异常。
MySQL推荐的解决方案:
在出现SQLException处,捕获catch,写这段重连接:
int retryCount = 5; //重连接次数,放在try...catch..finally之外

String sqlState = SQLException .getSQLState();

// 这个08S01就是这个异常的sql状态。单独处理手动重新链接就可以了。

if ("08S01".equals(sqlState) || "40001".equals(sqlState))

{

retryCount--;

} else {

retryCount = 0;

}

jt_s8645
jt_s8645 对就是这个问题,有没有从项目配置文件或者MySQL配置文件上解决这个问题的办法
2 年多之前 回复

这个错误的大概意思是数据连接被关闭了,无法完成连接,具体要查下你的脚本文件,主要是超时连接的断点重连的时间先后,是否与其一致。

提示上显示:连接被关闭,这个时候分两点去分析,
1.代码中是否有问题,比如:一个连接被关闭后,另外地方还在使用
2.数据库是否被关闭了,或者修改了密码导致连接失效

jt_s8645
jt_s8645 这个问题只有在数据库长期没有操作的情况下会发生,重启项目后就好了
2 年多之前 回复
 <environment id="env_stg">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="${driver}" />
                <property name="url" value="${url_stg}" />
                <property name="username" value="${username}" />
                <property name="password" value="${password}" />
                <property name="poolMaximumActiveConnections" value="20"/>
                <property name="poolMaximumIdleConnections" value="5"/>
                <!-- MySQLNonTransientConnectionException: No operations allowed after connection closed -->
                <property name="poolPingQuery" value="select 1"/>
                <property name="poolPingEnabled" value="true"/>
                <!-- 对于空闲的连接一个小时检查一次 -->
                <property name="poolPingConnectionsNotUsedFor" value="3600000"/>
            </dataSource>
        </environment>
jt_s8645
jt_s8645 回复xwh1314: 加上了,但是配置文件一直报错,求大神把完整的配置文件给我看一下,感激不尽!281755979@qq.com
2 年多之前 回复
xwh1314
xwh1314 回复jt_s8645: 嗯,是啊
2 年多之前 回复
jt_s8645
jt_s8645 这是在配置数据源的时候加上这个吗?
2 年多之前 回复
共11条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐