2014-11-10 3 views
0

У меня есть случай, когда у меня есть пользовательский ввод, который можно назвать RunningMode. Вход может иметь 3 возможных состояния: STATE1, STATE2, STATE1_AND_STATE2. Логика для реализации следующая, если STATE1 установлен, тогда stepA должен быть выполнен, если STATE2 установлен, тогда должен быть выполнен 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. Я повторяю содержимое stepA и stepB. Плюс, насколько я знаю, в stepC stepA и stepB не будут работать параллельно. Содержание ступеней A и stepB состоит из 2 блоков потока, каждый из которых я определяю шаги. Есть ли способ иметь условное следующее на stepA?

ответ

1

SB (as Spring is general) позволяет определить abstract step.
Вы можете определить реферат stepA и stepB и разделить с использованием parent собственности (например, split-flow official documentation).

2

Ниже приведен пример того, что Лука описывает:

<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> 
+0

версия Spring Batch, который я использую не позволяет определять абстрактные потоки, тем не менее спасибо за пример, который я достичь подобных результатов с шагами, вложенных в блоках потока , – Luke

Смежные вопросы