【问题标题】:Java connection reset issueJava连接重置问题
【发布时间】:2018-05-03 18:42:53
【问题描述】:

我正在处理一个遗留模块的复杂部分,其中多个表由 Java 进程维护。它在 Oracle 中使用简单的 JDBC 和准备好的语句。我们注意到此过程经常因连接重置异常而失败。任何人都可以建议我们如何实现重试逻辑以在重置时重新建立连接。也可以通过配置来完成,这样我们就不需要接触遗留代码了?

【问题讨论】:

  • 使用连接池并启用验证。当从池中借用连接时,会对其进行测试以确保其有效。验证应该是一个简单的查询,例如SELECT 1 FROM DUAL。如果无效,则池将其丢弃并尝试/创建另一个连接。请务必在查询完成后将对象返回到池中,以允许池管理连接。池处理提交/关闭,而不是查询类。
  • @AndrewS 谢谢,正如我提到它是一个遗留代码并且正在寻找一个非常小的变化,可以通过配置更改来实现重新连接吗?这段代码还处理了很多表,例如如果在处理过程中发生连接重置,如何触发重试连接?
  • 您是否使用任何类型的连接池?
  • 您遇到的确切异常是什么? Oracle 版本也可能是相关的,以及它是否是高可用性/RAC 安装。

标签: java jdbc exception-handling connection-reset


【解决方案1】:

当连接池未正确验证时会发生这种情况。

建议在使用前从连接池借用连接前进行测试。

这是我典型的 Spring 配置,请适应您的旧 Java 应用程序:

spring.datasource.tomcat:
   validation-query: SELECT 1  // test query
   test-on-borrow: true        // should test before borrowing from pool
   validation-interval: 30000  // Validation interval, reduce number of tests

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-14
    • 2011-10-20
    • 2020-02-01
    • 1970-01-01
    • 2011-06-03
    • 2013-06-12
    • 2014-10-21
    相关资源
    最近更新 更多