Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当我们通过停止mssql数据库强制拦截批处理执行时,如何找到加载记录的状态_Java_Database_Jooq - Fatal编程技术网

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。希望在将来的版本中使用这种功能。不确定。也许报告一个错误?理想情况下,报告的问题如下: