Вы можете сделать Spring Batch Step Partitioning .Разделение шага таким образом, чтобы у шага было несколько потоков, каждый из которых обрабатывал кусок данных параллельно.Это полезно, если у вас есть большой кусок данных, который можно логически разделить на более мелкие куски, которые можно обрабатывать параллельно.Это работает так, что вы определяете главный шаг, который отвечает за определение основы блоков, а затем перерабатывает все эти блоки в набор подчиненных шагов для обработки каждого блока.
При настройкеразделенный шаг, вы определяете шаг так же, как и любой другой шаг, присваивая ему идентификатор и, если требуется, значение следующего шага.Вместо определения содержимого шага как обычного chunk или tasklet , Spring Batch предоставляет тег раздела, который требует от вас указать шаг задания, подлежащий разбиению, и Partitioner, который будет использоваться для определения порций данных.Вам также нужно будет определить обработчик раздела, который будет обрабатывать эти шаги, в этом случае мы будем использовать ThreadPoolTaskExecutor , который будет иметь размер пула потоков 10 и разрешать им тайм-аут, если они не будут 't используется.
<bean id="loadTaskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="corePoolSize" value="10" />
<property name="maxPoolSize" value="10" />
<property name="allowCoreThreadTimeOut" value="true" />
</bean>
Информация о режиме здесь: https://keyholesoftware.com/2013/12/09/spring-batch-partitioning/