【发布时间】:2020-05-18 15:57:07
【问题描述】:
我正在使用 JdbcPagingItemReader 和 JdbcBatchItemWriter 实现 Spring Batch。我已经使用 TaskExecutor 来实现使用 setConcurrencyLimit 的多线程。但是我可能不是每次都有大数据,那我可以根据需要实现多线程吗?就像使用参数打开和关闭它一样?
【问题讨论】:
标签: multithreading spring-batch
我正在使用 JdbcPagingItemReader 和 JdbcBatchItemWriter 实现 Spring Batch。我已经使用 TaskExecutor 来实现使用 setConcurrencyLimit 的多线程。但是我可能不是每次都有大数据,那我可以根据需要实现多线程吗?就像使用参数打开和关闭它一样?
【问题讨论】:
标签: multithreading spring-batch
您可以将 SimpleAsyncTaskExecutor 添加到步骤配置中以使其成为多线程。下面是 Step config 的示例 sn-p,您可以在其中控制有条件地添加 TaskExecutor,
@Bean
public Step testStepConfig() {
boolean multiThreadingRequired = false; // It can be picked from the external config
AbstractTaskletStepBuilder<SimpleStepBuilder<String, Data>> stepConfig = stepBuilderFactory
.get("testStep").<String, Data>chunk(10)
.reader(reader()).processor(processor()).writer(writer())
.faultTolerant().retryLimit(3)
.listener(testStepListener());
if (multiThreadingRequired) {
stepConfig.taskExecutor(taskExecutor());
}
return stepConfig.build();
}
@Bean
public TaskExecutor taskExecutor() {
SimpleAsyncTaskExecutor taskExecutor = new SimpleAsyncTaskExecutor();
taskExecutor.setConcurrencyLimit(deleteTenantsMaxThreads);
return taskExecutor;
}
【讨论】: