• 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>

  • 相关阅读:
    LeetCode Flatten Binary Tree to Linked List
    LeetCode Longest Common Prefix
    LeetCode Trapping Rain Water
    LeetCode Add Binary
    LeetCode Subsets
    LeetCode Palindrome Number
    LeetCode Count and Say
    LeetCode Valid Parentheses
    LeetCode Length of Last Word
    LeetCode Minimum Depth of Binary Tree
  • 原文地址:https://www.cnblogs.com/sinodragon21/p/4300741.html
Copyright © 2020-2023  润新知