jt_s8645
jt_s8645
2018-04-27 03:02
采纳率: 45.5%
浏览 1.5k

项目部署后第二天报错: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条回答 默认 最新

  • xwh1314
    xwh1314 2018-05-05 02:53
    已采纳

    不行就试试这个,

         <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>
    
    点赞 评论
  • sinat_28984567
    二月十六 2018-04-27 03:09

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

    点赞 评论
  • weixin_39050337
    weixin_39050337 2018-04-27 03:11

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

    点赞 评论
  • wjinhhua
    wjinhhua 2018-04-27 03:20

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

    点赞 评论
  • qq_24888651
    qq_24888651 2018-04-27 03:22

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

    点赞 评论
  • androidkaifa
    merlin.chen 2018-04-27 03:23

    报错是在执行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;

    }

    点赞 评论
  • dreambeibei
    雷湘剑 2018-04-27 03:24

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

    点赞 评论
  • qq_37255815
    qq_37255815 2018-04-27 03:39

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

    点赞 评论
  • x1aoweiliang
    x1aoweiliang 2018-04-27 03:52

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

    点赞 评论
  • xwh1314
    xwh1314 2018-04-27 05:33
     <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>
    
    点赞 评论
  • Grace7575
    Grace7575 2018-04-27 08:41

    把mysql停止了,再重新启动试试

    点赞 评论

相关推荐