在 spring 批次中控制步级执行

Control step level execution in spring batch

是否可以根据 spring 批处理中的某些条件执行一个步骤或跳过它并继续下一步。 例如。批处理作业有 5 个步骤,在每个步骤执行之前,我们需要根据数据库中列的值检查是否跳过它。 要求是通过侦听器或可以在 运行 时间控制步骤执行的其他方式创建通用逻辑?

我需要在 运行 时填充下一个属性。示例 xml:

    <batch:step id="step1" next="stepdecision">
        <batch:tasklet ref="tasklet1" />
    </batch:step>

    <batch:step id="step2" next="stepdecision">
        <batch:tasklet ref="tasklet1" />
    </batch:step>

    <batch:step id="step3" next="stepdecision">
        <batch:tasklet ref="tasklet1" />
    </batch:step>

    <batch:step id="step4" next="stepdecision">
        <batch:tasklet ref="tasklet1" />
    </batch:step>

    <batch:decision id="stepdecision" decider="decider">
        <batch:next on="next" to="#{jobExecutionContext[nextStep]}" />
    </batch:decision>

</batch:job>

<bean id="decider" class="com.bmo.apms.batch.StepFlowDecider">
</bean>
<bean id="tasklet1" class="com.bmo.apms.batch.TestTasklet" />

但它抛出异常: 配置问题:无法访问元素 [step2]|

我认为 spring 不允许在 运行 时绑定下一个属性。 请指教

不要在运行时配置下一个值。配置 Decider 将在运行时 return 的内容。这就是决策者的全部意义。

我实现了这个 b 创建了一个找到下一步的决策者。 每个步骤的下一个属性是他的决策者,它将它转发到 运行 时间的实际步骤。

    <batch:decision id="stepdecision" decider="decider">
        <batch:next on="step1" to="step1" />
        <batch:next on="step2" to="step2" />
        <batch:next on="step3" to="step3" />
        <batch:next on="step4" to="step4" />
        <batch:end on="end" />
    </batch:decision>


<batch:next on="step3" to="step3" />
        <batch:next on="step4" to="step4" />
        <batch:end on="end" />
    </batch:decision>

    <batch:step id="step1" next="stepdecision">
        <batch:tasklet ref="tasklet1" />
    </batch:step>

    <batch:step id="step2" next="stepdecision">
        <batch:tasklet ref="tasklet1" />
    </batch:step>

    <batch:step id="step3" next="stepdecision">
        <batch:tasklet ref="tasklet1" />
    </batch:step>

    <batch:step id="step4" next="stepdecision">
        <batch:tasklet ref="tasklet1" />
    </batch:step>