【问题标题】:mysql hosted DB, jdbc after a while the application freezes一段时间后,mysql托管数据库,jdbc应用程序冻结
【发布时间】:2016-03-19 20:24:50
【问题描述】:

我运行一个 java 程序并尝试将它与托管数据库一起使用,我自己使用 Mysql 运行 Vserver ubuntu 12.04,具有完全的 root 访问权限。

我更改了my.cnf 以获得更多资源。 当我启动应用程序时,它很快,与本地数据库几乎没有任何区别。

我的问题是,在一段时间不活动后,程序冻结可能是因为连接断开。 任何错误日志中都没有条目。如果我杀死应用程序并重新启动它,它会再次运行,除了 kill 没有其他工作,它是一台 linuxPC。

我使用了?autoReconnect=true,但我不确定这是否正确,这些表是 innodb。

有没有人知道如何避免连接断开或如何确保重新连接?

PS [17.12.2015] ?autoReconnect=true 已被移除

今天终于等到了一些细节

com.openbravo.basic.BasicException: 
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet successfully received from the server was 2.435.471 milliseconds ago.  The last packet sent successfully to the server was 959.832 milliseconds ago.

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: 
Communications link failure

The last packet successfully received from the server was 2.435.471 milliseconds ago.  The last packet sent successfully to the server was 959.832 milliseconds ago.

java.net.SocketException: 

wait_timeout 太短时会发生这种情况吗? 在“错误”之后,程序再次运行!

【问题讨论】:

  • 您能否详细介绍一下您的 java 程序的活动?连接是如何建立的?

标签: java mysql jdbc innodb


【解决方案1】:

autoReconnect 对 InnoDB 很危险。当连接在事务中间丢失时,事务中的先前操作将回滚。但是代码继续运行,就好像事务继续一样。这可能会导致后续写入与回滚的数据不一致。

您最好识别丢失的连接并重新启动事务。

【讨论】:

    【解决方案2】:

    您的问题缺少具体信息,但我猜会发生什么。 MySQL 服务器有一个名为 wait_timeout 的参数(参见 official doc)。

    当您的connection 超过该超时时间时,MySQL 将关闭它,如果您没有正确管理 SQLExceptions,您的应用程序就会出现问题。

    您可以尝试增加wait_timeout 或查看您的连接代码以管理异常,但两者都是变通方法。

    我不建议您将autoReconnect 作为任何问题的替代方法,相反,最好将连接管理封装到业务逻辑中,以便每次管理打开/关闭连接你需要的时间。也许连接池可以帮助你。

    我的意思是,当您从 UI 调用业务方法时(它不介意它是 web、ws、桌面还是其他任何东西),您必须管理打开的连接并开始事务,( 和其他交叉关注点,如授权、审计、日志......)。在所有业务逻辑期间,控制可能的异常、提交或回滚以及释放资源。

    如果你发布一些代码,你会得到更具体的答案。

    希望对你有帮助!

    【讨论】:

    • 感谢您的链接。该应用程序不是由我制作的,它是一个在本地主机上运行良好的 Java 应用程序,但出于移动性的原因,我想使用托管数据库。我将开始并试验 wait_timeout 的值。
    猜你喜欢
    • 2015-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-10
    • 1970-01-01
    • 2016-09-06
    相关资源
    最近更新 更多