Spring batch - Chunk 模型的条件步骤流程

Spring batch - conditional step flow for Chunk model

我有两个步骤,如果步骤 1 处理器在过滤后未返回任何项目,则应跳过步骤 2。 我看到 ItemListenerSupport 可以扩展并且可以利用后处理。

@Override
public void afterProcess(NumberInfo item, Integer result) {
    super.afterProcess(item, result);
    if (item.isPositive()) {
        stepExecution.setExitStatus(new ExitStatus(NOTIFY));
    }
}

我的处理是基于块的,我想在处理完所有块后设置退出状态,如果有任何项目未过滤。我目前正在将未过滤的项目添加到 ExecutionContext 并在下一步中使用。

如果所有块的所有项目都被过滤掉,我将如何阻止下一步

对于程序化决策,您可以使用 JobExecutionDecider。此 API 使您可以访问上一步的 StepExecution,因此您可以根据上一步执行及其执行上下文中的任何信息做出下一步 运行 的决定。在您的情况下,它可能是过滤器计数或您预先存储在执行上下文中的任何对您的决定有意义的东西。

您可以在参考文档的 Programmatic Flow Decisions 部分找到有关此 API 和一些代码示例的更多详细信息。