热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JDBC如何实现Mysql自动重连的机制

日志:usingtheConnectorJconnectionpropertyautoReconnecttruetoavoidthisproblemcom.mysql
日志:using the Connector/J connection property 'autoReconnect=true' to avoid this problem

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


1 jdbc.url=jdbc:mysql://ipaddress:3306/database?autoReconnect=true&autoReconnectForPools=true


第二种:用hibernate的话, 加如下属性: 


1 <property name&#61;"connection.autoReconnect">trueproperty>
2 <property name&#61;"connection.autoReconnectForPools">trueproperty>
3 <property name&#61;"connection.is-connection-validation-required">trueproperty>


第三种&#xff1a;要是还用c3p0连接池: 


1 <property name&#61;"hibernate.c3p0.acquire_increment">1property>
2 <property name&#61;"hibernate.c3p0.idle_test_period">0property>
3 <property name&#61;"hibernate.c3p0.timeout">0property>
4 <property name&#61;"hibernate.c3p0.validate">trueproperty>


第四种&#xff1a;最不好的解决方案

使用Connector/J连接MySQL数据库&#xff0c;程序运行较长时间后就会报以下错误&#xff1a;

Communications link failure&#xff0c;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属性避免该错误。

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

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

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

⑵.没办法&#xff0c;只能修改MySQL的参数了&#xff0c;wait_timeout最大为31536000即1年&#xff0c;在my.cnf中加入&#xff1a;

[mysqld]

wait_timeout&#61;31536000

interactive_timeout&#61;31536000

重启生效&#xff0c;需要同时修改这两个参数。



推荐阅读
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 深入解析Spring Cloud Ribbon负载均衡机制
    本文详细介绍了Spring Cloud中的Ribbon组件如何实现服务调用的负载均衡。通过分析其工作原理、源码结构及配置方式,帮助读者理解Ribbon在分布式系统中的重要作用。 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • 使用Python在SAE上开发新浪微博应用的初步探索
    最近重新审视了新浪云平台(SAE)提供的服务,发现其已支持Python开发。本文将详细介绍如何利用Django框架构建一个简单的新浪微博应用,并分享开发过程中的关键步骤。 ... [详细]
  • andr ... [详细]
  • 本文深入探讨了 Java 中的 Serializable 接口,解释了其实现机制、用途及注意事项,帮助开发者更好地理解和使用序列化功能。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • XNA 3.0 游戏编程:从 XML 文件加载数据
    本文介绍如何在 XNA 3.0 游戏项目中从 XML 文件加载数据。我们将探讨如何将 XML 数据序列化为二进制文件,并通过内容管道加载到游戏中。此外,还会涉及自定义类型读取器和写入器的实现。 ... [详细]
  • 如何在窗口右下角添加调整大小的手柄
    本文探讨了如何在传统MFC/Win32 API编程中实现类似C# WinForms中的SizeGrip功能,即在窗口的右下角显示一个用于调整窗口大小的手柄。我们将介绍具体的实现方法和相关API。 ... [详细]
author-avatar
php小盗
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有