1

是否有可能

  1. 监控每个分区的线程/线程
  2. 失败时手动/以编程方式重新启动它们。

根据我的阅读,我了解批处理框架为我们处理它。但是,如果我想自己做。我该怎么做?

我在 Webshpere Liberty 上使用 IBM 的 JSR 352 实现。

4

1 回答 1

2

批处理框架确实为您处理了其中的一些。它记录每个分区的最终状态(例如COMPLETEDFAILED),并且在重新启动作业时,它将仅重新启动那些失败的分区(默认情况下)。

但你只能直接操作这项工作。因此,一般而言,您将通过等待所有其他分区完成(COMPLETEDFAILED )重新启动具有FAILED分区的作业,然后重新启动作业,此时FAILED分区将重新执行。

因此,它旨在允许尽可能多的当前执行完成,而不是快速失败。

如果您真正想要的是尽快重新启动每个分区而不等待所有分区完成并完成作业,您可能需要批量查看重试功能。

例如,要回滚并重试SQLTransactionRollbackException,您可以通过以下方式在 XML 中以声明方式执行此操作:

        <chunk retry-limit="3">
          <reader ref="...">
          ...
          <retryable-exception-classes>
            <include class="java.sql.SQLTransactionRollbackException"/>
          </retryable-exception-classes>
        </chunk>

这些是否适合您的用例?如果没有,有兴趣听听为什么不。

于 2016-04-21T14:49:20.680 回答