Spring 批处理 - 块模型的条件步骤流

问题描述

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

@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 的更多详细信息和一些代码示例。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...