Spring批量配置的依赖树

时间:2011-09-28 14:59:33

标签: spring spring-batch

有弹簧作业定义:

<job id="footballJob">
    <!-- Step bean details ommitted for clarity -->
    <step id="playerload" next="gameLoad"/>
    <step id="gameLoad" next="playerSummarization"/>
    <step id="playerSummarization"/>
</job>

我可以通过编程方式确定要执行的步骤的顺序吗?

2 个答案:

答案 0 :(得分:1)

步骤将按照您在示例中列出的顺序执行。

如果您想指定订单,您可以执行以下操作:

<job id="job">
    <step id="stepA" parent="s1" next="stepB" />
    <step id="stepB" parent="s2" next="stepC"/>
    <step id="stepC" parent="s3" />
</job>

如果您想要非连续步骤执行/ 条件流,您可以执行以下操作:

<job id="job">
    <step id="stepA" parent="s1">
        <next on="*" to="stepB" />
        <next on="FAILED" to="stepC" />
    </step>
    <step id="stepB" parent="s2" next="stepC" />
    <step id="stepC" parent="s3" />
</job>

为了以编程方式控制流程,取决于ExitStatus,您可以注入自己的decider

public class MyDecider implements JobExecutionDecider {
    public FlowExecutionStatus decide(JobExecution jobExecution, StepExecution stepExecution) {
        if (someCondition) {
            return "FAILED";
        }
        else {
            return "COMPLETED";
        }
    }
}

在作业配置中,“决定”标签将指定要使用的决策者以及所有过渡:

<job id="job">
    <step id="step1" parent="s1" next="decision" />

    <decision id="decision" decider="decider">
        <next on="FAILED" to="step2" />
        <next on="COMPLETED" to="step3" />
    </decision>

    <step id="step2" parent="s2" next="step3"/>
    <step id="step3" parent="s3" />
</job>

<beans:bean id="decider" class="com.MyDecider"/>

编辑

如果您希望获得dependency graph,可以使用Spring Tool Suite来显示流量,这里是simple example

答案 1 :(得分:1)

  

我可以逐步找出要执行的步骤的顺序吗?

从字面上理解你的问题有一些选择:

我会选择一个简单的xml解析器