0

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

用作dborg.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中有一些东西会自动为我做这件事而我错过了?

任何信息将不胜感激。

谢谢!

4

1 回答 1

1

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

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

虽然您应该有一种理智的方式来处理您“手头”失败的连接,但如果您不保持连接太久,那么您还testOnBorrow可以testOnReturn查看BasicDataSource. 这些并不一定意味着在每个查询之前进行测试选择,除非您真的只是在每个查询之前收集一个句柄。

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

于 2011-10-18T15:09:00.770 回答