Spring Batch decider没有重复

时间:2014-11-10 07:13:58

标签: java spring-batch

我有一个案例,我有一个用户输入让我们称之为RunningMode。输入可以有3种可能的状态:STATE1,STATE2,STATE1_AND_STATE2。 如果设置了STATE1,则执行的逻辑如下:如果设置了STATE2则应该执行stepA,然后执行stepB,最后如果设置了STATE1_AND_STATE2,那么我应该并行执行stepA和stepB。

我知道如何以这样丑陋的方式解决这个问题:

<batch:decision id="makeWorkFlowDecision" decider="myDecider"> 
                    <batch:next on="STATE1" to="stepA" /> 
                    <batch:next on="STATE2" to="stepB" />
                    <batch:next on="STATE1_AND_STATE2" to="stepC" />
</batch:decision>

<batch:split id="stepA" task-executor="taskExecutor">
<!-- content of stepA -->     
</batch:split>   
<batch:split id="stepB" task-executor="taskExecutor">
<!-- content of stepB -->     
</batch:split>    

<batch:split id="stepC" task-executor="taskExecutor">
<!-- content of stepA --> 
<!-- content of stepB -->     
</batch:split>  

就像你可以看到stepC中有重复一样。我重复步骤A和步骤B的内容。另外据我所知,在步骤C中,步骤A和步骤B不会并行运行。 stepA和stepB的内容由2个流程块组成,每个流程块在其中定义步骤。有没有办法在stepA上有条件接下来?

2 个答案:

答案 0 :(得分:2)

以下是Luca所描述的一个例子:

<flow id="flowA">
    <!-- stepA related steps here -->
</flow>

<flow id="flowB">
    <!-- stepB related steps here -->
</flow>

<batch:split id="stepA" task-executor="taskExecutor">
    <flow parent="flowA"/>
</batch:split>   
<batch:split id="stepB" task-executor="taskExecutor">
    <flow parent="flowB"/>
</batch:split>    

<batch:split id="stepC" task-executor="taskExecutor">
    <flow ref="flowA"/>
    <flow ref="flowB"/>
</batch:split>  

答案 1 :(得分:1)

SB(正如Spring一般)允许您定义abstract step 您可以定义抽象stepAstepB并使用parent属性进行拆分(例如,选中split-flow official documentation)。