zoukankan      html  css  js  c++  java
  • 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>

  • 相关阅读:
    有关base64编码算法的相关操作
    不宜多吃的十种垃圾食品
    ~ 無 淚 的 天 使 ~
    Datagrid 中添加ComboBox 的两种方法(winform)
    刀兄写的IIS管理类(C#)
    17种常用正则表达式
    正则表达式经典 (转)
    C#中Pinvoke的使用
    C#中Pinvoke的使用2
    异步操作样本
  • 原文地址:https://www.cnblogs.com/sinodragon21/p/4300741.html
Copyright © 2011-2022 走看看