Как несколько раз запустить Spring Batch? [Дубликат]

У меня была полная ошибка. Очень пространственный случай: если вы подключите крюк неназванной функции (замыкания) к точке крюка объекта объекта. После этого вы попытаетесь сериализовать этот объект.

4
задан Chris Oppedal 27 March 2015 в 16:23
поделиться

1 ответ

Способ, которым я подхожу к этому, заключается в следующем:

  1. Первый шаг загружает список.
  2. Второй шаг обрабатывает элемент в списке.
  3. Второй шаг имеет StepExecutionListener, который оценивает, есть ли в списке больше элементов для обработки. Если это так, он возвращает ExitStatus, который отображает один и тот же шаг. Если нет, он возвращает ExitStatus, который отображает для завершения задания или продолжения задания (в зависимости от остальной части потока).

Например:

StepExecutionListener

public class MyListener {

    @Autowired
    private List myItems;

    @AfterStep
    public ExitStatus afterStep(StepExecution stepExecution) {
        if(myItems.size() > 0) {
            return new ExitStatus("CONTINUE");
        }
        else {
            return new ExitStatus("FINISHED");
        }
    }
}

Конфигурация заданий

...
@Bean
public Step step1() {...}

@Bean
public MyListener listener() {..}

@Bean
public Step step2(MyListener listener) {
    return stepBuilder.get("step2")
                .tasklet(myTasklet()) // Replace this piece as needed
                .listener(listener).build();
}

@Bean
public Job job1(Step step1, Step step2) {
    return jobBuilder.get("job1")
                     .start(step1)
                     .next(step2).on("CONTINUE").to(step2).on("FINISHED").end()
                     .build();
}
...

Примечание. Я не тестировал этот код, чтобы могли быть опечатки и т. Д.

8
ответ дан Michael Minella 22 August 2018 в 20:55
поделиться
  • 1
    Спасибо. Это отлично работает, если вы добавите еще один вызов в конец () в компоненте Job. – Chris Oppedal 30 March 2015 в 02:02
  • 2
    Итак, если я хочу продолжить с step1, могу ли я назвать это .next(step2).on("CONTINUE").to(step1).on("FINISHED").end()? – irvana 16 March 2016 в 08:50
  • 3
    как сделать выполнение нескольких шагов 2 параллельно, а не последовательно в этом случае, у меня есть список элементов в списке, который может выполняться параллельно – Senthilkumar Annadurai 5 October 2016 в 10:28
  • 4
    Я попробовал это и получаю & quot; org.springframework.batch.core.job.SimpleStepHandler - повторяющийся шаг [step2], обнаруженный при выполнении задания = [имя_пользователя]. Если какой-либо шаг завершится неудачно, оба будут выполнены снова при перезагрузке. & Quot; в журнале. У вас тоже была эта проблема? Есть ли способ исправить это? – user2241895 12 October 2017 в 08:41
  • 5
    Я тоже ищу способы запустить это параллельно. – jonasespelita 21 December 2017 в 05:45
Другие вопросы по тегам:

Похожие вопросы: