Java 当我们通过停止mssql数据库强制拦截批处理执行时,如何找到加载记录的状态
我们正在为数据库实现连接或刷新重试逻辑。 自动提交=真Java 当我们通过停止mssql数据库强制拦截批处理执行时,如何找到加载记录的状态,java,database,jooq,Java,Database,Jooq,我们正在为数据库实现连接或刷新重试逻辑。 自动提交=真 RetryPolicy retryPolicy = new RetryPolicy() .retryOn(DataAccessException.class) .withMaxRetries(maxRetry) .withDelay(retryInterval, TimeUnit.SECONDS); result = F
RetryPolicy retryPolicy = new RetryPolicy()
.retryOn(DataAccessException.class)
.withMaxRetries(maxRetry)
.withDelay(retryInterval, TimeUnit.SECONDS);
result = Failsafe.with(retryPolicy)
.onFailure(throwable -> LOG.warn("Flush failure, will not retry. {} {}"
, throwable.getClass().getName(), throwable.getMessage()))
.onRetry(throwable -> LOG.warn("Flush failure, will retry. {} {}"
, throwable.getClass().getName(), throwable.getMessage()))
.get(cntx -> {
return batch.execute();
});
我们希望通过在后端停止mssql db服务来拦截存储、更新、插入和删除记录。在某些时候,即使我们得到org.jooq.exception.DataAccessException,批处理(批处理的子集)中的一些记录也会加载到数据库中
有什么方法可以使用jooq api查找失败和成功加载的记录吗?jooq api在这方面帮不上你的忙,因为这样的功能显然超出了相对较低级别的jooq api的范围,后者可以帮助你编写类型安全的嵌入式SQL。它不会对您的业务逻辑或基础架构逻辑做出任何假设
理想情况下,您将在此处运行自己的诊断。例如,您已经有了一个
BATCHID
列,该列应该可以检测哪些记录是使用哪个进程插入/更新的。重新运行批处理时,需要检测是否已尝试此批处理,请记住前面的BATCHID
,并获取上次尝试的id
,以便在重新运行之前执行任何需要执行的操作。jOOQ API在这里不能帮助您开箱即用,因为这样的功能显然超出了相对较低级别的jOOQ API的范围,后者可以帮助您编写类型安全的嵌入式SQL。它不会对您的业务逻辑或基础架构逻辑做出任何假设
理想情况下,您将在此处运行自己的诊断。例如,您已经有了一个
BATCHID
列,该列应该可以检测哪些记录是使用哪个进程插入/更新的。重新运行批处理时,您需要检测到您已经尝试过此批处理,记住以前的BATCHID
,并获取以前尝试的Id
,以便在重新运行之前执行任何需要执行的操作。这些异常是什么类型的?@LukasEder,我们的测试用例是:#1个插头和拔掉互联网连接#2个Db服务停止和启动。收到的异常:由以下原因引起:org.jooq.Exception.DataAccessException:SQL[合并到\“dbo\”\“file150\”,使用(选择1[one])作为虚拟--(ID=?)上的U 82901439([one]),匹配时更新集[NAME]=?,[TEAM]=,[BATCHID]=?不匹配时,插入([ID],[NAME],[TEAM],[BATCHID])值(?,,,?);连接已关闭哪些类型的异常?@LukasEder,我们的测试用例是:#1插拔互联网连接#2分贝服务停止和启动。收到的异常:由以下原因引起:org.jooq.Exception.DataAccessException:SQL[合并到\“dbo\”\“file150\”,使用(选择1[one])作为虚拟--(ID=?)上的U 82901439([one]),匹配时更新集[NAME]=?,[TEAM]=,[BATCHID]=?不匹配时,插入([ID],[NAME],[TEAM],[BATCHID])值(?,,,?);连接已关闭感谢@Lukas Eder的提示响应。我的问题是:当我们通过停止db服务/删除internet连接中断批处理执行时,为什么org.jooq.Batch.execute()没有抛出java.sql.BatchUpdateException?。如果它抛出BatchUpdateException,那么我可以通过在BatchUpdateException对象上调用getUpdateCounts()来捕获updatedRowCount。希望在将来的版本中使用这种功能。不确定。也许报告一个错误?最理想的参考资料是:感谢您的及时回复@Lukas Eder。我的问题是:当我们通过停止db服务/删除internet连接中断批处理执行时,为什么org.jooq.Batch.execute()没有抛出java.sql.BatchUpdateException?。如果它抛出BatchUpdateException,那么我可以通过在BatchUpdateException对象上调用getUpdateCounts()来捕获updatedRowCount。希望在将来的版本中使用这种功能。不确定。也许报告一个错误?理想情况下,报告的问题如下: