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>

  • 相关阅读:
    .net UserControl用户控件传值
    (DevExpress2011控件教程)ASPXTreeList 范例2: ASPxTreeList杂项设置
    [转 逆水行船]Oracle中创建表,创建序列,创建自增字段,添加注释, 添加记录,添加触发器,提交
    封装基本类在项目中的应用
    [原创]visual 2008下使用Enterprise library4.01连接Oracle的例子
    [转thyking xiao's blog]asp.net 2.0实现多语言(一)
    jquery autocomplete 实现搜索提示功能,中文/拼音也没问题
    jQuery API$.extend(target,prop1,propN)
    通用权限管理设计 之 数据库结构设计
    jQuery弹出层插件Dialog
  • 原文地址:https://www.cnblogs.com/sinodragon21/p/4300741.html
Copyright © 2011-2022 走看看