在春季批次中控制步骤级别执行

时间:2016-12-22 07:49:08

标签: spring spring-batch spring-transactions

是否可以执行步骤或跳过它并根据弹簧批次中的某些条件继续下一步。 例如。批处理作业中有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不允许在运行时绑定下一个属性。 请指教。

2 个答案:

答案 0 :(得分:0)

不要在运行时配置下一个值。配置UITabBarController将在运行时返回的内容。这是决策者的全部观点。

答案 1 :(得分:0)

我实现了这个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>