【发布时间】:2018-05-03 18:42:53
【问题描述】:
我正在处理一个遗留模块的复杂部分,其中多个表由 Java 进程维护。它在 Oracle 中使用简单的 JDBC 和准备好的语句。我们注意到此过程经常因连接重置异常而失败。任何人都可以建议我们如何实现重试逻辑以在重置时重新建立连接。也可以通过配置来完成,这样我们就不需要接触遗留代码了?
【问题讨论】:
-
使用连接池并启用验证。当从池中借用连接时,会对其进行测试以确保其有效。验证应该是一个简单的查询,例如
SELECT 1 FROM DUAL。如果无效,则池将其丢弃并尝试/创建另一个连接。请务必在查询完成后将对象返回到池中,以允许池管理连接。池处理提交/关闭,而不是查询类。 -
@AndrewS 谢谢,正如我提到它是一个遗留代码并且正在寻找一个非常小的变化,可以通过配置更改来实现重新连接吗?这段代码还处理了很多表,例如如果在处理过程中发生连接重置,如何触发重试连接?
-
您是否使用任何类型的连接池?
-
您遇到的确切异常是什么? Oracle 版本也可能是相关的,以及它是否是高可用性/RAC 安装。
标签: java jdbc exception-handling connection-reset