Multithreading Spring批处理可选或条件多线程
我正在使用JdbcPagingItemReader和JdbcBatchItemWriter实现Spring批处理。我使用TaskExecutor使用SetConcurrencyLit实现了多线程。但我可能不是每次都有大量数据,所以我可以根据需要实现多线程吗?像使用参数打开和关闭它一样?您可以将SimpleAsyncTaskExecutor添加到步骤配置中,使其成为多线程的。下面是步骤配置的一个示例片段,您可以在其中控制有条件地添加TaskExecutorMultithreading Spring批处理可选或条件多线程,multithreading,spring-batch,Multithreading,Spring Batch,我正在使用JdbcPagingItemReader和JdbcBatchItemWriter实现Spring批处理。我使用TaskExecutor使用SetConcurrencyLit实现了多线程。但我可能不是每次都有大量数据,所以我可以根据需要实现多线程吗?像使用参数打开和关闭它一样?您可以将SimpleAsyncTaskExecutor添加到步骤配置中,使其成为多线程的。下面是步骤配置的一个示例片段,您可以在其中控制有条件地添加TaskExecutor @Bean public
@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;
}
@Bean
公共步骤testStepConfig(){
boolean multiThreadingRequired=false;//可以从外部配置中选择
AbstractTaskletStepBuilder stepConfig=stepBuilderFactory
.get(“testStep”).chunk(10)
.reader(reader()).processor(processor()).writer(writer())
.faultTolerant().retryLimit(3)
.listener(testStepListener());
if(需要多线程){
taskExecutor(taskExecutor());
}
返回stepConfig.build();
}
@豆子
公共任务执行器任务执行器(){
SimpleAsyncTaskExecutor taskExecutor=新的SimpleAsyncTaskExecutor();
setConcurrencyLit(deleteTenantsMaxThreads);
返回任务执行器;
}
您可以将SimpleAsyncTaskExecutor添加到步骤配置中,使其成为多线程的。下面是步骤配置的一个示例片段,您可以在其中控制有条件地添加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;
}
@Bean
公共步骤testStepConfig(){
boolean multiThreadingRequired=false;//可以从外部配置中选择
AbstractTaskletStepBuilder stepConfig=stepBuilderFactory
.get(“testStep”).chunk(10)
.reader(reader()).processor(processor()).writer(writer())
.faultTolerant().retryLimit(3)
.listener(testStepListener());
if(需要多线程){
taskExecutor(taskExecutor());
}
返回stepConfig.build();
}
@豆子
公共任务执行器任务执行器(){
SimpleAsyncTaskExecutor taskExecutor=新的SimpleAsyncTaskExecutor();
setConcurrencyLit(deleteTenantsMaxThreads);
返回任务执行器;
}
谢谢。我使用了ApplicationArguments,并通过命令行参数传递它们。这种方法也有效。@ThinkCode太好了:)谢谢。我使用了ApplicationArguments,并通过命令行参数传递它们。这种方法也很有效。@ThinkCode太棒了:)