当前位置: 首页 > 知识库问答 >
问题:

如何测试MySQL连接是否已被服务器超时(Java)?

贺靖
2023-03-14

Java中测试MySQL连接是否被服务器超时/保持连接活动的标准方法是什么?(com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:从服务器成功接收的最后一个数据包是73.596.145毫秒前…)

一些文章建议定期ping以保持连接。我可以开始一个独立的线程来做这个,好的。然而,是否有一些简单的测试,我可以执行,并重新连接,只有在必要的时候?或者定期ping是最好的表现方式吗?

布尔java。sql。联系isClosed()声明“只有在调用方法Connection.close后调用该方法时,才能保证该方法返回true”,我想这对我来说不起作用。

我可以在内部跟踪上次请求后的秒数,并将其与select@@wait\u timeout 并在时间过长时重新连接。

那么,了解连接是否超时/保持连接活动的标准方法是什么?

非常感谢!


共有1个答案

冀鸿才
2023-03-14

我也遇到过同样的问题。

必须测试的一个解决方案是从java.sql.Connection调用"isValid(int timeout)"方法

或者在mysql中设置autoreconnect:http://dev.mysql.com/doc/refman/5.0/en/auto-reconnect.html

或者在mysql中更改超时(默认值为8小时):http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_wait_timeout

编辑:但我认为最好的做法是在交易期间打开连接,然后直接关闭它。

 类似资料:
  • 问题内容: 使用控制台,如何确定sidekiq是否已连接到Redis服务器?我希望能够做这样的事情: 问题答案: 您可以使用Sidekiq提供的Redis信息: 从Sidekiq的Sinatra状态应用程序中获取了它。

  • 根据IBM文档:清除策略指定在检测到陈旧连接或致命连接错误时如何清除连接。有效值为EntirePool和FailingConnectionOnly。 问题:服务器如何/何时知道连接已过时?它是否会尽快(立即)清洗池任何连接都会过时,或者按照收获时间发生? 假设收割时间为180秒。假设收割线程上次在下午3:05运行,连接在下午3:06失效,服务器是在下午3:06自己清除池,还是只在下午3:08清除池

  • 我使用快速和连接超时中间件来处理超时。 它工作得很好,但是我默认的服务器的超时设置为两分钟。 因此,如果我想将超时中间件设置为大于两分钟的值,我还必须将http服务器超时增加到稍大一点(否则我的连接超时处理程序不会被调用) 我怎样才能避免这种情况?我错过什么了吗?

  • 问题内容: 我希望能够以编程方式(在T-SQL中)检查当前服务器和数据库是否已存在特定的链接服务器(这样,如果该链接尚不存在,则可以创建它)。我尝试过这样的事情: 但是,即使链接已经存在,OBJECT_ID测试也始终返回null。有什么方法可以在T-SQL中执行此检查,以便我的其余代码可以假定链接始终存在? 问题答案: 办理登机手续sys.servers:

  • 本文向大家介绍Linux 检测服务器是否连接着网络,包括了Linux 检测服务器是否连接着网络的使用技巧和注意事项,需要的朋友参考一下 Linux 检测服务器是否连接着网络 摘要: 每隔5分钟检测一次服务器是否连接着网络,如果三次检测都没有网络?则自动关机! 主要使用场景: 由于自己有一台服务器放在偏远的老家,有可能会遇到停电导致断网的问题,并且停电后UPS使用时间也有限制, 因此设计此脚本为了解

  • 我正在迁移一个带有MySQL数据库的Java应用程序。现在连接会在某个时候超时,尽管使用相同参数的同一个连接在以前的几个事务中工作得很好。代码如下: 公共类DBConnection{ } 和我的日志: null 2016-06-21 15:53:31,436警告[com.arjuna.ats.arjuna](Transaction Reaper Worker 0)arjuna012108:Chec