我有一个案例,我有一个用户输入让我们称之为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上有条件接下来?
答案 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
您可以定义抽象stepA
和stepB
并使用parent
属性进行拆分(例如,选中split-flow official documentation)。