JSR 352 步骤分区 - 分区手动重启
JSR 352 Step Partitioning - Partition Restart Manually
是否可以
- 监控每个分区thread/threads
- 当它们失败时重新启动它们manually/programatically。
根据我的阅读,我了解到批处理框架会为我们处理它。但是,以防万一我想自己做。我该怎么做?
我在 Webshpere Liberty 上使用 IBM 的 JSR 352 实现。
批处理框架确实会为您处理其中的一些问题。它记录每个分区的最终状态(例如 COMPLETED 或 FAILED),并且在重新启动作业时,它将仅重新启动那些 FAILED(默认)。
但是你只能直接操作作业。所以一般来说,您可以等待所有其他分区完成(COMPLETED 或 FAILED 来重新启动具有 FAILED 分区的作业),然后重新启动作业,此时 FAILED 分区将重新执行。
因此它旨在允许尽可能多的当前执行完成,而不是快速失败。
如果您真正想要的是尽快重启每个分区而不等待所有分区完成和作业完成,您可能需要查看 重试 批处理功能。
例如要在 SQLTransactionRollbackException 上回滚和重试,您可以在 XML 中以声明方式执行此操作,方法是:
<chunk retry-limit="3">
<reader ref="...">
...
<retryable-exception-classes>
<include class="java.sql.SQLTransactionRollbackException"/>
</retryable-exception-classes>
</chunk>
这些是否适合您的用例?如果没有,有兴趣听听为什么不。
是否可以
- 监控每个分区thread/threads
- 当它们失败时重新启动它们manually/programatically。
根据我的阅读,我了解到批处理框架会为我们处理它。但是,以防万一我想自己做。我该怎么做?
我在 Webshpere Liberty 上使用 IBM 的 JSR 352 实现。
批处理框架确实会为您处理其中的一些问题。它记录每个分区的最终状态(例如 COMPLETED 或 FAILED),并且在重新启动作业时,它将仅重新启动那些 FAILED(默认)。
但是你只能直接操作作业。所以一般来说,您可以等待所有其他分区完成(COMPLETED 或 FAILED 来重新启动具有 FAILED 分区的作业),然后重新启动作业,此时 FAILED 分区将重新执行。
因此它旨在允许尽可能多的当前执行完成,而不是快速失败。
如果您真正想要的是尽快重启每个分区而不等待所有分区完成和作业完成,您可能需要查看 重试 批处理功能。
例如要在 SQLTransactionRollbackException 上回滚和重试,您可以在 XML 中以声明方式执行此操作,方法是:
<chunk retry-limit="3">
<reader ref="...">
...
<retryable-exception-classes>
<include class="java.sql.SQLTransactionRollbackException"/>
</retryable-exception-classes>
</chunk>
这些是否适合您的用例?如果没有,有兴趣听听为什么不。