Как настроить упомянутый вариант использования с использованием пружинного пакетного параллельного пошагового разделения потока?

Я хочу реализовать этот вариант использования, у меня 3 потока,

<split id="split1" task-executor="taskExecutor">
    <flow>
        <step id="step1" parent="s1" next="step2"/>
        <step id="step2" parent="s2"/>
    </flow>
    <flow>
        <step id="step3" parent="s3"/>
    </flow>
    <flow>
        <step id="step4" parent="s4"/>
    </flow>
    <flow>
        <step id="step5" parent="s5"/>
    </flow>
</split>


<split id="split2" task-executor="taskExecutor">
    <flow>
        <step id="step6" parent="s6"/>
        <step id="step7" parent="s7"/>
    </flow>
    <flow>
        <step id="step8" parent="s8"/>
    </flow>
</split>

<split id="split3" task-executor="taskExecutor">
    <flow>
        <step id="step9" parent="s9"/>
        <step id="step10" parent="s10"/>
        <split id="split3_1" task-executor="taskExecutor">
             <flow>
                 <step id="step11" parent="s11"/>
             </flow>
            <flow>
                  <step id="step12" parent="s12"/>
             </flow>
        </split>
    </flow>
</split>

В split1 есть 4 потока, которые должны работать параллельно. После завершения step2 и step3 он должен запустить split2 и не должен ждать step4 и step5 в split1.

Точно так же, если шаги step4 и step 5 завершены, он должен запустить выполнение split3, не дожидаясь завершения step2 и step3.

Также возможно добавить шаги и разделить поток вместе, например. в приведенном выше разделе split3 я хочу, чтобы step9 и step10 выполнялись в обязательном порядке, а затем выполнялись step11 и step12 параллельно.

Как я могу настроить этот вариант использования? Могут ли разбиения быть вложенными?


person vishal    schedule 08.04.2014    source источник


Ответы (1)


Я бы сначала попробовал что-то вроде следующего:

<split id="split1" task-executor="taskExecutor">
    <flow>
        <split next="split2">
            <flow>
                <step id="step1" parent="s1" next="step2"/>
                <step id="step2" parent="s2"/>
            </flow>
            <flow>
                <step id="step3" parent="s3"/>
            </flow>
        </split>

        <split id="split2" task-executor="taskExecutor">
            <flow>
                <step id="step6" parent="s6"/>
                <step id="step7" parent="s7"/>
            </flow>
            <flow>
                <step id="step8" parent="s8"/>
            </flow>
        </split>
    </flow>

    <flow>
        <split next="split3" task-executor="taskExecutor">
            <flow>
                <step id="step4" parent="s4"/>
            </flow>
            <flow>
                <step id="step5" parent="s5"/>
            </flow>
        </split>

        <split id="split3" task-executor="taskExecutor">
            <flow>
                <step id="step9" parent="s9"/>
                <step id="step10" parent="s10"/>
            </flow>
            <flow>
                <step id="step11" parent="s11"/>
            </flow>
        </split>
    </flow>
</split>

но убедитесь, что версия Spring Batch старше 2.1.5.

person Andrei Stefan    schedule 08.04.2014
comment
Спасибо попробую, вложенный сплит работает? Это нигде не упоминается в документации? - person vishal; 08.04.2014
comment
Это не упоминается в документации, но это сообщение на форуме (forum.spring.io/forum/spring-projects/batch/), где прокомментировал Дэйв Сайер, указывает, что эта конфигурация должна работать. - person Andrei Stefan; 08.04.2014
comment
Спасибо, в моем варианте использования есть небольшой поворот, мне сейчас нужен сценарий, как я упоминал в split3. Доработал вопрос. Я пробовал, но он говорит, что элемент split3_1 недоступен - person vishal; 09.04.2014
comment
если это невозможно, что можно обойти? - person vishal; 09.04.2014
comment
Я мог бы добавить step9 и step10 в разделение, но разделение не допускает единого потока. Разрешение единого потока может сделать возможным множество вариантов использования, которые я все еще не могу вписать в этот - person vishal; 09.04.2014
comment
На шаге 9 добавьте next="split10", а на шаге 10 добавьте next="split3_1" и повторите попытку. - person Andrei Stefan; 09.04.2014