• MySQL的8小时连接超时时间,导致系统过夜即崩溃,报错Could not roll back Hibernate transaction


    2014年3月开始给单位开发《机关规范化管理网络平台》,10月底成功上线运行,但是存在一个bug:

    部署环境: apache tomcat 6.0.41 + mysql5.5 + jbpm

    Bug重现方法: 部署好环境后,在无用户访问该系统的情况下,过一晚上,第二天再登录就会报出如下错误:Could not roll back Hibernate transaction; nested exception is org.hibernate.TransactionException: JDBC rollback failed.

    * 解决方案查找初级(表层)篇:一开始,baidu、google了“Could not roll back Hibernate transaction; nested exception is org.hibernate.TransactionException: JDBC rollback failed.”。review过网上找到的解决方案后,觉得都不能解决我的问题。

    * 解决方案查找进阶(深入)篇:找到tomcat的日志,位于:%tomcat_home%logs\%service_name%-stdout.2015-02-25.log。(注意:stderr.xxx.log里面没有找到运行时错误日志;为了重启服务器后tomcat自动启动,把tomcat注册为window下的service了)

    查看报错地方的调用栈:

    STACKTRACE:

    com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception:

    ** BEGIN NESTED EXCEPTION **

    java.net.SocketException

    MESSAGE: Software caused connection abort: socket write error

    STACKTRACE:

    java.net.SocketException: Software caused connection abort: socket write error

        at java.net.SocketOutputStream.socketWrite0(Native Method)

        ... ... ...

    根本原因:

    tomcat服务器隔一段时间不访问,就会与MySQL数据库断开连接,并报错:
        java.net.SocketException: Software caused connection abort: socket write error
    原因是MySQL的连接超时时间是8小时。若空闲超过8小时,MySQL就会自动断开连接。

    解决方案:
    使用连接池可以解决这个问题,这里使用c3p0:
    修改hibernate.cfg.xml文件
    <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
    < property name="hibernate.c3p0.min_size">8</property>
    < property name="hibernate.c3p0.max_size">200</property>
    < property name="hibernate.c3p0.timeout">600</property>
    < property name="hibernate.c3p0.max_statements">0</property>
    < property name="hibernate.c3p0.idle_test_period">60</property>
    < property name="hibernate.c3p0.acquire_increment">2</property>
    < property name="hibernate.c3p0.validate">true</property>

  • 相关阅读:
    Uncaught TypeError: Cannot read property 'PRINT_INIT' of undefined user:100
    haproxy 负载elasticsearch 切换
    高德地图-展示多个信息窗口
    elasticsearh 中每个节点中需要有相同的插件
    haporxy 负载elasticsearch
    AngularJS之ng-if指令
    文件上传并展示上传文件
    json编解码
    Grok 正则捕获
    logstash date插件介绍
  • 原文地址:https://www.cnblogs.com/sinodragon21/p/4300741.html
Copyright © 2020-2023  润新知