`

使用Hibernate + MYSQL数据库问题(Hibernate连接数据库超时设置autoReconnect=true)

阅读更多

 

使用Hibernate + MYSQL数据库开发,链接超时问题:

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.

 

查了一下,原来是mysql超时设置的问题
如果连接闲置8小时 (8小时内没有进行数据库操作), mysql就会自动断开连接, 要重启tomcat.

 

 

解决办法:

 

 

    一种. 如果不用hibernate的话, 则在 connection url中加参数: autoReconnect=true

jdbc.url=jdbc:mysql://ipaddress:3306/database?autoReconnect=true&autoReconnectForPools=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>

 

 

 四。最不好的解决方案

 

使用Connector/J连接MySQL数据库,程序运行较长时间后就会报以下错误:

Communications link failure,The last packet successfully received from the server was *** millisecond ago.The last packet successfully sent to the server was ***  millisecond ago。

其中错误还会提示你修改wait_timeout或是使用Connector/J的autoReconnect属性避免该错误。

后来查了一些资料,才发现遇到这个问题的人还真不少,大部分都是使用连接池方式时才会出现这个问题,短连接应该很难出现这个问题。这个问题的原因:

MySQL服务器默认的“wait_timeout”是28800秒即8小时,意味着如果一个连接的空闲时间超过8个小时,MySQL将自动断开该连接,而连接池却认为该连接还是有效的(因为并未校验连接的有效性),当应用申请使用该连接时,就会导致上面的报错。

1.按照错误的提示,可以在JDBC URL中使用autoReconnect属性,实际测试时使用了autoReconnect=true&failOverReadOnly=false,不过并未起作用,使用的是5.1版本,可能真像网上所说的只对4之前的版本有效。

2.没办法,只能修改MySQL的参数了,wait_timeout最大为31536000即1年,在my.cnf中加入:

[mysqld]

wait_timeout=31536000

interactive_timeout=31536000

重启生效,需要同时修改这两个参数。

 

 

 

分享到:
评论

相关推荐

    hibernate自动重新连接数据库proxool的使用

    例如,设置`hibernate.proxool.statistics`为`true`,可以开启统计信息,便于分析连接池的使用情况。 在应用运行过程中,如果检测到数据库连接断开,`Hibernate`会根据配置的`Proxool`参数尝试重新建立连接。这大大...

    Tomcat6.0+MyEclipse6.0+mysql5.0数据库连接池配置!.pdf

    autoReconnect=true`,其中`localhost`是服务器地址,`3306`是MySQL的默认端口,`bbs`是数据库名,`autoReconnect=true`确保在连接断开后能自动重连。 3. `username`和`password`:数据库的用户名和密码,这里设置为...

    MySQL数据库连接超时(Wait_timeout)问题总结.pdf

    MySQL数据库的连接超时问题,通常表现为Wait_timeout错误,指的是当客户端与服务器之间的连接在指定时间内没有进行任何数据交互,数据库会自动断开这个连接,以释放资源并防止不必要的资源占用。这一特性在MySQL中是...

    Tomcat6.0+MyEclipse6.0+mysql5.0数据库连接池配置![参考].pdf

    在软件开发过程中,数据库连接池的配置是必不可少的步骤,特别是在使用Java EE应用程序服务器如Tomcat时。本篇文章将详细讲解如何配置Tomcat ...正确配置后,应用程序将能高效地管理和使用数据库连接,提高整体性能。

    关于MySQL的wait-timeout连接超时问题报错解决方案.docx

    3. 使用 Connector/J 连接属性 'autoReconnect=true',避免连接超时的问题。 结论 MySQL 连接超时问题是常见的错误之一,解决该问题需要了解 wait_timeout 参数的重要性,并正确地使用 show variables 命令。同时...

    Tomcat6.0+MyEclipse6.0+mysql5.0数据库连接池配置!宣贯.pdf

    在IT行业中,数据库连接池是应用服务器管理数据库连接的重要组件,它可以提高系统性能,通过复用已存在的数据库连接,减少创建和销毁...通过这种方式,应用程序能够便捷地管理和使用数据库连接,提高了系统的运行效率。

    hibernate多数据库配置

    在上面的配置中,我们使用 DynamicDataSource 作为 Hibernate 的数据源, Hibernate 将根据当前的数据库连接信息选择对应的数据源。 使用 Spring 框架和 Hibernate,我们可以轻松地配置多数据库连接信息,并自由...

    Tomcat6.0+MyEclipse6.0+mysql5.0数据库连接池配置![借鉴].pdf

    完成上述步骤后,你已经成功配置了一个基于Tomcat 6.0的数据库连接池,使用MyEclipse 6.0开发环境,连接到MySQL 5.0数据库。接下来,你可以在Java代码中通过JNDI查找来获取数据源,建立数据库连接。 例如,下面是一...

    关于MySQL的wait-timeout连接超时问题报错解决方案.pdf

    4. 考虑使用 Connector/J 连接属性:在使用 Hibernate 进行数据库操作时,可以考虑使用 Connector/J 连接属性,例如 autoReconnect=true,来避免连接超时问题。 5. 及时释放连接:在使用完毕连接后,需要及时释放...

    jira使用MySql数据库

    jira是一个项目管理工具,它使用数据库来存储数据,默认情况下jira使用的是HSQL数据库,但是HSQL数据库可能存在不安全因素,因此建议使用其他数据库,例如MySql数据库。下面是jira使用MySql数据库的配置步骤: 一、...

    Spring Boot 配置MySQL数据库重连的操作方法

    要解决连接超时问题,我们可以在连接 URL 上添加 autoReconnect=true 来解决。例如: jdbc:mysql://localhost:3306/test?autoReconnect=true 然而,需要注意的是,MySQL 不推荐使用 autoReconnect 配置,因为如果...

    java微信商城完整源码数据库 MySQL源码类型 WebForm

    true&characterEncoding\=UTF-8&autoReconnect\=true 4、重启Tomcat。 后台路径:http://域名/admin 后台用户名:admin 密码:admin 后台功能:系统设置、管理员列表、文章栏目、文章管理、产品管理、留言管理

    java连接各种数据库连接串.docx

    autoReconnect=true&sessionVariables=sql_mode='PIPES_AS_CONCAT'`,其中`127.0.0.1`是服务器IP,`db`是数据库名,`autoReconnect`和`sql_mode`是额外的连接参数。 - 对于Oracle,连接字符串可能是`jdbc:oracle:...

    基于springboot的一个IT人才招聘网站系统源码+数据库+部署文档,公司可以发布岗位需求,求职者查找岗位并递交简历等

    serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true&useSSL=false username: root password: 123456 默认用户名和密码为 root / 123456 默认数据库名为:...

    MySQL wait_timeout连接超时

    3. **使用`autoReconnect=true`属性**:如果你的应用使用的是MySQL的JDBC驱动,可以在连接字符串中添加`autoReconnect=true`属性。这将使驱动在检测到连接断开后尝试重新建立连接。然而,这种方法并非总是可靠,因为...

    基于springboot的一个IT人才招聘网站系统源码+数据库+部署文档(高分毕业设计)

    基于springboot的一个IT人才招聘...serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true&useSSL=false username: root password: 123456 默认用户名和密码为 root /

    Ofbiz10.04改用mysql数据库配置

    autoReconnect=true"`:这里是数据库URL,包括主机地址、端口、数据库名和自动重连设置。 - `jdbc-username="root"`和`jdbc-password=""`:输入你的MySQL数据库的用户名和密码。 - `table-type="InnoDB"`:选择合适...

    SpringBoot初学者教程 IDEA数据库配置-迅速爬坑上手

    3. 在“数据库”设置页面,选择“mysql”数据库类型,并输入数据库连接信息。 4. 点击“应用”按钮,IDEA 将保存数据库连接信息。 五、使用 JPA 操作数据库 现在,我们已经配置了数据库连接信息,下一步我们可以...

Global site tag (gtag.js) - Google Analytics