首页 > 解决方案 > 在运行期间停止 JSR 批处理应用程序而不抛出异常

问题描述

我们有一个 jsr 352 java 批处理应用程序,如果满足条件但不抛出异常,我们希望提前停止执行。我们工作的基本布局如下:

<job id=XXX>
  <step id="XXX">
    <listeners>
      <listener ref=XXXXX /> <--Step listener
      <listener ref=XXXX /> <-- Item process listener
    </listeners>
    <chunk checkpoint-policy="item" item-count="1">
      <reader ref=XXXXXX />
      <processor ref=XXXXXX />
      <writer ref=XXXXXX />
    </chunk>
  </step>
</job>

在我们的 step 监听器中,在 beforeStep() 方法中,如果满足特定条件,我们不想继续批处理作业的其余部分,我们只想优雅地停止。到目前为止,唯一会结束批处理作业的事情将是针对错误场景引发的异常或作业的成功完成。

如果在步骤侦听器中满足该条件,我们将如何完成跳过其余步骤,因为它是唯一的步骤?此外,抛出异常是在错误情况下结束批处理过程的推荐方法,还是有更好/更推荐的方法?

标签: jsr352java-batch

解决方案


您可以有一个外部组件来监视条件并根据条件停止当前作业的执行。调用JobOperator stop方法将优雅地停止作业执行。

或者您可以让您的项目阅读器检查条件,并在 true 时返回 null,这自然会结束步骤执行。


推荐阅读