Я думаю, вы неправильно понимаете, как работает Spring Batch.Позвольте мне начать с этого, а затем перейти к параллелизму.
Шаг на основе чанка в Spring Batch состоит из ItemReader
, необязательного ItemProcessor
, а затем ItemWriter
.Каждый из них, очевидно, поддерживает композицию (Spring Batch предоставляет некоторые компоненты для использования композиции в фазах ItemProcessor
и ItemWriter
).На этом этапе Spring Batch читает элементы до тех пор, пока не будет выполнено заданное условие (обычно размер куска).Затем этот список повторяется, передавая каждый элемент в ItemProcessor
.Наконец, список всех результатов вызовов ItemProcessor
передается в ItemWriter
за один вызов.Идея прочитать один раз, затем сделать несколько шагов, а затем написать совсем не так, как работает Spring Batch.Наиболее близким мы получим один ItemReader
, затем с помощью композиции создадим цепочку ItemProcessor
вызовов, затем один вызов ItemWriter
.
. С учетом сказанного Spring Batch предоставляетколичество вариантов параллелизма.Существует пять различных вариантов масштабирования заданий Spring Batch.Я не буду вдаваться в подробности о каждом из них, потому что это выходит за рамки этого и четко обсуждается в других вопросах StackOverflow, а также в документации.Однако список выглядит следующим образом:
- Многопоточные шаги - Здесь каждый кусок (блок элементов, обрабатываемых в транзакции) выполняется в отдельном потоке с использованием абстракции Spring *
TaskExecutor
.. - Параллельные шаги - Здесь пакетное задание снова выполняет несколько независимых шагов параллельно, используя абстракцию Spring
TaskExecutor
для управления используемыми тегами. - AsyncItemProcessor/ AsyncItemWriter - Здесь каждый вызов
ItemProcessor
вызывается в своем собственном потоке.Полученный Future
передается в AsyncItemWriter
, который разворачивает Future
и результаты сохраняются. - Секционирование - Spring Batch позволяет разбить набор данных на несколько секцийкоторые затем выполняются параллельно либо через локальные механизмы потоков, либо удаленно.
- Удаленное разбиение на блоки - Последний вариант заключается в том, чтобы мастер считывал данные, а затем отправлял их пулу рабочих дляобработка и запись.