当前位置:  开发笔记 > 编程语言 > 正文

为什么autoReconnect = true似乎不起作用?

如何解决《为什么autoReconnect=true似乎不起作用?》经验,为你挑选了1个好方法。

我使用JDBC连接到MySQL服务器(我认为没有连接池).在我的连接URL中autoReconnect=true

但我的联系仍然超时.我甚至检查过conn.isClosed()它的错误.但是当我尝试使用连接时,我得到以下异常.

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
...

我知道在Java 1.6中你可以conn.isValid(0)用来检查连接,但我使用的是Java 1.5

有没有办法确保它没有超时?或者我将不得不升级到Java 1.6?



1> Eric Petroel..:

我有同样的问题,这绝对令人抓狂.这是文档在MySQL网站上的说法(强调我的)

驾驶员是否应该尝试重新建立陈旧和/或死亡的连接?如果启用,驱动程序将为在旧连接或死连接上发出的查询抛出异常,这些查询属于当前事务,但会在新事务中在连接上发出下一个查询之前尝试重新连接.建议不要使用此功能,因为当应用程序无法正确处理SQLExceptions时,它会产生与会话状态和数据一致性相关的副作用,并且仅在您无法配置应用程序以处理因死亡而导致的SQLExceptions时使用和陈旧的连接正确.或者,研究将MySQL服务器变量"wait_timeout"设置为某个高值而不是默认值8小时.

根据我的经验,它似乎不像"重新连接下一个查询"功能,但我使用MySQL 4.0,这可能是原因.

我最终编写了一个捕获异常的迷你框架,检查该特定错误,并尝试重新连接并在可能的情况下重试查询.

ETA:此链接提供了更多信息,并表明将来可能会删除autoReconnect.


建议不要使用autoReconnect,因为它将来会被删除8到10年.然而,我仍然看到MySQL 5.x提供了指导,设置Connector/J autoReconnect属性是一个解决此问题的选项...
从链接的文档:"没有100%安全的方式,如果TCP/IP连接死亡,JDBC驱动程序可以自动重新连接而不会有损坏数据库'状态'的风险(即使_with_ transactional语义),这就是为什么这个功能最终会被删除."
推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有