文档章节

Hibernate连接数据库超时设置

zchuanzhao
 zchuanzhao
发布于 2016/11/14 21:46
字数 500
阅读 31
收藏 0

com.MySQL.jdbc.CommunicationsException: The last packet successfully received from the server was58129 seconds ago.The last packet sent successfully to the server was 58129 seconds ago, which is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.
解决办法:
如果连接闲置8小时 (8小时内没有进行数据库操作), mysql就会自动断开连接, 要重启tomcat. 
不用hibernate的话, connection url加参数: autoReconnect=true 
用hibernate的话, 加如下属性:

<property name="connection.autoReconnect">true</property> 
<property name="connection.autoReconnectForPools">true</property> 
<property name="connection.is-connection-validation-required">true</property>

要是还用c3p0连接池: 
<property name="hibernate.c3p0.acquire_increment">1</property> 
<property name="hibernate.c3p0.idle_test_period">0</property> 
<property name="hibernate.c3p0.timeout">0</property> 
<property name="hibernate.c3p0.validate">true</property>

或者最王道的解决办法,那就是直接修改mysql的配置文件my.ini 在配置文件的最后增加wait_timeout=343232后面的数字是以秒计算。改个10年100年多方便的。

另外的解决办法:

解决hibernate+mysql出现的隔天连接超时问题

出现错误:SQL Error: 0, SQLState: 08S01
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
** END NESTED EXCEPTION **
Last packet sent to the server was 0 ms ago

问题出现原因
mysql默认为8小时后自动消除空闲连接,而hibernate默认空连接超时时间大于这个数。

解决方法
1.找到mysql5.0目录下的my.ini文件,在最底处(或任意位置)添加wait_timeout =60(60为自定义值)
2.用c3p0代替hibernate的连接池。c3p0.9.1.jar可从hibernate开源项目的lib下面找到,将其拷贝到web-inf/lib下面。在hibernate.cfg.xml配置文件中添加以下信息:
<property name="hibernate.c3p0.min_size">2</property>
<property name="hibernate.c3p0.timeout">5000</property>
<property name="hibernate.c3p0.max_statements">100</property>
<property name="hibernate.c3p0.idle_test_period">3000</property>
<property name="hibernate.c3p0.acquire_increment">2</property>
<property name="hibernate.c3p0.validate">false</property>

其中hibernate.c3p0.timeout属性指定多少秒后连接超时,连接池会自动对超时连接进行重查。

© 著作权归作者所有

共有 人打赏支持
zchuanzhao
粉丝 50
博文 242
码字总数 145449
作品 1
福州
程序员
私信 提问
hibernate连接MySQL报错Access denied for user 'root'@'localhost'

郁闷,用hibernate里连接MySQL数据库报错: ERROR: HHH000319: Could not get database metadata java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)......

kaneqi
2013/03/13
25.7K
16
解决MySql数据库连接超时问题

在Mysql的默认设置中,如果一个数据库连接超过8小时没有使用(闲置8小时,即28800s),mysql server将主动断开这条连接。![在此输入图片描述][1] 在运维监控系统中,程序会报如下异常: 底层...

gerry_pang
2013/11/22
0
0
Hibernate 学习笔记

Hibernate冬眠 ORM框架(O - R mapping )分别是对象 关系 映射 对象 – 持久化 – 数据库 (关系数据库、对象数据库) 对象 – 关系 Hibernate的优点:(1)使用HIBERNATE.应用层就可以专...

xiahuawuyu
2012/03/05
0
0
Spring的事务管理

一、事务的基础知识 数据库事务:复杂的事务要分步执行,要么整体生效、要么整体失效。 必须满足:原子性、一致性、隔离性、持久性。 数据并发问题:脏读:A读取了B未提交的更改数据。 不可重...

cnslp
2017/06/08
0
0
mysql 8小时空闲后连接超时的问题

近一段时间,部门同事反映在使用mysql的过程出现数据库连接问题 应用程序和数据库建立连接,如果超过8小时应用程序不去访问数据库,数据库就断掉连接 。这时再次访问就会抛出异常,如下所示:...

iTeacher
2012/05/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

容器服务

简介 容器服务提供高性能可伸缩的容器应用管理服务,支持用 Docker 和 Kubernetes 进行容器化应用的生命周期管理,提供多种应用发布方式和持续交付能力并支持微服务架构。 产品架构 容器服务...

狼王黄师傅
昨天
3
0
高性能应用缓存设计方案

为什么 不管是刻意或者偶尔看其他大神或者大师在讨论高性能架构时,自己都是认真的去看缓存是怎么用呢?认认真真的看完发现缓存这一块他们说的都是一个WebApp或者服务的缓存结构或者缓存实现...

呼呼南风
昨天
12
0
寻找一种易于理解的一致性算法(扩展版)

摘要 Raft 是一种为了管理复制日志的一致性算法。它提供了和 Paxos 算法相同的功能和性能,但是它的算法结构和 Paxos 不同,使得 Raft 算法更加容易理解并且更容易构建实际的系统。为了提升可...

Tiny熊
昨天
2
0
聊聊GarbageCollectionNotificationInfo

序 本文主要研究一下GarbageCollectionNotificationInfo CompositeData java.management/javax/management/openmbean/CompositeData.java public interface CompositeData { public Co......

go4it
昨天
3
0
阿里云ECS的1M带宽理解

本文就给大家科普下阿里云ECS的固定1M带宽的含义。 “下行带宽”和“上行带宽” 为了更好的理解,需要先给大家解释个词“下行带宽”和“上行带宽”: 下行带宽:粗略的解释就是下载数据的最大...

echojson
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部