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>

时间: 2024-12-09 01:22:50

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

golang中mysql建立连接超时时间timeout 测试

本文测试连接mysql的超时时间. 这里的"连接"是建立连接的意思. 连接mysql的超时时间是通过参数timeout设置的. 1.建立连接超时测试 下面例子中,设置连接超时时间为5s,读超时时间6s. MySQL server IP是192.168.0.101,端口3306. 每3s执行一次SQL. // simple.go package main import ( "database/sql" "log" "time"

HttpClient 4.5版本设置连接超时时间

HttpClient升级到4.5版本后,API有很多变化,HttpClient 4之后,API一直没有太稳定,我感觉4.5版本抽象后,很多API应该快稳定了. 使用HttpClient,一般都需要设置连接超时时间和获取数据超时时间.这两个参数很重要,目的是为了防止访问其他http时,由于超时导致自己的应用受影响. 4.5版本中,这两个参数的设置都抽象到了RequestConfig中,由相应的Builder构建,具体的例子如下: CloseableHttpClient httpclient = H

Exchange调整入站SMTP连接超时时间

双方邮件服务器在通过SMTP传送邮件的过程中,由于网络/带宽问题,或是邮件太大:花费的传递时间总会超过Exchange服务器SMTP连接限制的最大超时时间,最终导致邮件接受失败. 1.打开Exchange Management Shell窗口,先查看当前默认接收连接器的超时时间,假设默认接收连接器的名称为:Default EXCHANGE2010 Get-ReceiveConnector -Identity "Default EXCHANGE2010" |FL 可以看到Connecti

httpclient: 设置请求的超时时间,连接超时时间等

public static void main(String[] args) throws Exception{ //创建httpclient CloseableHttpClient httpClient = HttpClients.createDefault(); //创建http get HttpGet httpGet = new HttpGet("http://www.taotao.com/"); //构建超时等配置信息 RequestConfig config = Reques

git连接不上远程仓库---visualstudio提交代码报错:no upstream configured for branch &#39;master&#39;

1,新建文件夹,在文件下下鼠标右键git bush--->git init,初始化仓库: 2,设置gitthub仓库地址:git remote add origin https://github.com/z*****g/lm.git 3,git pull origin master 4,git push --set-upstream origin master,关联一个远程分支,并从这个分支上传下带代码 git branch查看分支 git add . git commit -m "提交注

MYSQL的数据连接超时时间设置

大规模多线程操作事务的时候,有时候打开一个链接,会进行等待,这时候如果数据库的超时时间设置的过短,就可能会出现,数据链接自动被释放,当然设置过大也不好,慢SQL或其他因素引起的链接过长,导致整个系统被拖慢,甚至挂掉. SO,适当的设置超时时间. 网上查了很多资料,大多数解决方案都写的太复杂,其实只要设置一下等待超时时间就OK了 设置方法: SHOW GLOBAL VARIABLES LIKE '%timeout%'SET GLOBAL wait_timeout=10000

redis未设置idle超时时间导致连接过多

今天ELK收集日志的时候,发现收集失败,查找各方面原因,最后在redis日志里面发现报错:[2489] 02 Jun 10:43:42 # Error allocating resoures for the client 错误是无法为客户端分配资源,查看redis连接数:# redis-cli info | grep connected        connected_clients:5036connected_slaves:0 客户端的连接竟然有达到5000多 查看客户端连接情况:redis

HTTP请求超时时间导致的请求长时间等待

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' 发送http请求需要添加超时时间,否则大量的请求会导致被请求方,积累好多待关闭请求,导致后续请求长时间等待,无法释放 参考:https://blog.csdn.net/shootyou/article/details/6615051 原文地址:https://www.cnblogs.com/wanhua-wu/p/10618733.html

RMI 连接超时时间设定

System.setProperty("sun.rmi.transport.tcp.responseTimeout", "2000"); System.setProperty("sun.rmi.transport.tcp.readTimeout", "2000"); System.setProperty("sun.rmi.transport.connectionTimeout", "2000&qu