gpt4 book ai didi

java - 如何正确处理连接空闲超时错误

转载 作者:行者123 更新时间:2023-11-29 14:42:00 26 4
gpt4 key购买 nike

我使用 Java 和 SpringFramework 通过 JdbcTemplate 类在 Mysql Server 上进行数据库编程。

使用org.apache.commons.dbcp.BasicDataSource作为数据库数据源。

有时,当连接长时间空闲时,会抛出 CommunicationException 并显示以下消息:

The last packet successfully received from the server was XXXXX milliseconds ago.

我不想通过向连接添加 autoReconnect 参数或添加一个在每个查询之前执行 select 1 的属性来处理此问题,以确保连接正确打开。我也不想修改 mysql 服务器的配置并提高超时值。

我想做的是正确处理该异常。

我考虑过捕获 CommunicationException 并重试直到成功为止,如果失败超过 X 次,则抛出一个异常,表明重试 X 次失败。

  • 有人知道如何处理这个问题吗?
  • 我的想法怎么样? :)
  • 也许 springframework 中有一些东西可以自动为我做这件事,但我错过了?

任何信息将不胜感激。

谢谢!

最佳答案

如果您的查询可重新启动,那么重试可能是有意义的。我知道我们在某些地方这样做,并且对于奇怪的临时故障来说效果很好。我们确实记录了该事件,因为它确实应该很少见。

连接失败是生活的一部分,应该以与连接超时不同的方式处理。

虽然您应该有一个明智的方法来处理“手中”失败的连接,但如果您没有保持连接太长时间,那么您也可以查看 testOnBorrowBasicDataSourcetestOnReturn 属性。这些并不一定意味着在每个查询之前进行测试选择,除非您确实只是在每个查询之前收集句柄。

如果池上有很多连接,并且它们的使用频率不足以阻止超时,那么这实际上是一个配置错误。编写代码来避免这种情况似乎有点落后。

关于java - 如何正确处理连接空闲超时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7808836/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com