Spring batch - выполнение шага назад ИЛИ повторное выполнение ранее выполненных шагов

1

У меня есть весеннее пакетное задание, давайте скажем 5 шагов (step1 --> step2 --> step3 --> step4 --> step5). Я настроил StepExectutionListener, который прослушивает 2 события

beforeStep() и afterStep() для всех этапов.

Мой вопрос заключается в том, что если я нахожусь в beforeStep(), и шаг, который нужно выполнить, это step2, могу ли я снова запустить step1 в beforeStep() -пакет? После выполнения step1 1 поток должен продолжаться до step2, step3 и т.д.

Чтобы еще раз пояснить, могу ли я сказать весенней партии "начать выполнение" с ранее выполненного шага еще раз?

Теги:
spring
spring-batch

2 ответа

1
Лучший ответ

Хотя я, вероятно, не рекомендую это поведение, да, оно должно быть выполнено. Вам нужно будет настроить step2 для перехода к шагу 1 с правильным кодом выхода, и шаг 1 должен будет повторить.

конфигурация

<step id="step1" next="step2">
    <tasklet ref="someTasklet" allow-start-if-complete="true"/>
</step>
<step id="step2">
    <tasklet ref="someOtherTasklet"/>
    <listeners>
        <listener ref="loopingListener"/>
    </listeners>
    <next on="BACK" to="step1"/>
</step>

Код

public class LoopingListener extends StepExecutionListenerSupport {

    @Override
    public ExitStatus afterStep(StepExecution stepExecution) {
        if(shouldLoop) {
            return new ExitStatus("BACK");
        } else {
            return stepExecution.getExitStatus();
        }
    }
}
  • 0
    Спасибо @Michael Minella за ваш ответ. Похоже, хорошее решение. Позвольте мне попробовать это ..
  • 0
    @ Майкл Минелла, как добиться того же, если у нас есть перезапускаемый шаг
0

Вы можете добиться определенного порядка шагов, используя следующий подход.

<step id="step1" next="step3">
<tasklet>(...)</tasklet>
</step>

следующий параметр определит, что будет выполнено следующим образом. Однако я не уверен, что вы можете вернуться в одно и то же исполнение. Но Spring позволяет перезапустить шаг, если вы используете

позволяет стартер-если-полный

к истине.

Также для создания рабочих процессов см. Http://docs.spring.io/spring-batch/2.2.x/apidocs/org/springframework/batch/core/job/builder/FlowBuilder.SplitBuilder.html.

Надеюсь это поможет.

  • 0
    Спасибо за ваш ответ. Я хочу сделать один шаг назад, пока выполняется текущее задание ... Возможно ли это в любом случае с помощью Spring Batch API?
  • 1
    Согласно моему опыту, опция Only, которую я вижу, использует условный поток, такой как <step id = "step3" next = "step1" on = "FAILED">. для такого направления.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню