Ваше приложение создает 10 потоков, но это не обязательно потоки Spring Batch. Согласно вашей конфигурации, должен быть создан только один поток с префиксом MyBatch-
.
Кроме того, вы объявили исполнителя задач как компонент, но не задали его на шаге разбиения. Ваш partitionStep
должен выглядеть примерно так:
@Bean
public Step partitionStep() throws IOException {
Step mainStep = stepBuilderFactory.get("mainStep")
.<InOut, InOut>chunk(1)
.reader(ResourceReader())
.processor(processor())
.writer(itemWriter())
.build();
return this.stepBuilderFactory.get("partitionStep")
.step(mainStep) // instead of .partitioner(mainStep)
.partitioner("mainStep", partitioner())
.taskExecutor(taskExecutor())
.build();
}
Как я могу применить свое приложение в мононитях? Taskexecutor не работает.
После установки исполнителя задач на шаг с разделами вы должны увидеть, что этот шаг выполняется единственным потоком, как определено в ThreadPoolTaskExecutor
. Однако я не вижу преимущества использования одного потока для шага с разделами, потому что обычной целью такой установки является обработка разделов параллельно (локально с несколькими потоками или удаленно с несколькими рабочими JVM).
В качестве примечания, хорошо, что вы выключаете исполнителя задач с помощью прослушивателя Job в afterJob
, но не System.exit
. Вы должны позволить корректно завершить работу JVM.
Надеюсь, это поможет.