Как мы можем обменяться данными между различными шагами Задания в Пакете Spring?

Роя в Пакет Spring, я хотел бы знать относительно того, Как мы можем обменяться данными между различными шагами Задания?

Мы можем использовать JobRepository для этого? Если да, как мы можем сделать это?

Есть ли какой-либо другой способ делать/достигать то же?

56
задан rajadilipkolli 18 April 2017 в 03:10
поделиться

2 ответа

Из шага вы можете поместить данные в StepExecutionContext . Затем с помощью слушателя вы можете продвигать данные из StepExecutionContext в JobExecutionContext .

Этот JobExecutionContext доступен на всех следующих этапах.

Будьте осторожны: данные должны быть короткими. Эти контексты сохраняются в JobRepository посредством сериализации, а длина ограничена (2500 символов, если я хорошо помню).

Таким образом, эти контексты хороши для совместного использования строк или простых значений, но не для совместного использования коллекций или огромных объемов данных.

Совместное использование огромных объемов данных не является философией Spring Batch. Spring Batch - это набор отдельных действий, а не огромная единица бизнес-обработки.

30
ответ дан 26 November 2019 в 17:22
поделиться

хранилище заданий используется косвенно для передачи данных между шагами (Жан-Филипп прав, что лучший способ сделать это - поместить данные в StepExecutionContext, а затем использовать многословный ExecutionContextPromotionListener для продвижения ключей контекста выполнения шага в JobExecutionContext.

Полезно отметить, что существует также слушатель для продвижения ключей JobParameter в StepExecutionContext (еще более многословное название JobParameterExecutionContextCopyListener); вы обнаружите, что часто используете их, если ваши шаги задания не полностью независимы друг от друга.

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

Что касается размера данных, которые передаются в контексте, я бы также предложил, чтобы они были небольшими (но у меня нет никакой конкретики по

36
ответ дан 26 November 2019 в 17:22
поделиться
Другие вопросы по тегам:

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