Spring Batch:与 AsyncItemProcessor 和 AsyncItemWriter 异步

问题描述 投票:0回答:1

我想通过异步处理来提高我的 Spring Batch 性能

我注意到类

AsyncItemProcessor
有一个方法
setTaskExecutor

public AsyncItemProcessor asyncDataProcessor() throws Exception {
    AsyncItemProcessor<List<Data>, List<Data>> processor = new AsyncItemProcessor<>();
    processor.setDelegate(dataProcessor());
    processor.setTaskExecutor(taskExecutor());
    return processor;
}

但是StepBuilder类也有这个

taskExecutor
方法:

@Bean
public Step dataStep(JobRepository jobRepository,
                       PlatformTransactionManager transactionManager, DataService dataService) throws Exception {
    return new StepBuilder("dataStep", jobRepository)
            .<List<Data>, List<Data>>chunk(1, transactionManager)
            .reader(dataItemReader(dataService))
            .processor(asyncDataProcessor())
            .writer(asyncDataWriter(dataService))
            .taskExecutor(taskExecutor())
            .build();
}

我应该在两个 bean 定义中使用这个方法吗? AsyncItemProcessor 中的 setTaskExecutor 和 StepBuilder 中的 taskExecutor 有什么区别?

java spring spring-batch
1个回答
0
投票

当您在步骤构建器上设置任务执行器时,您将配置一个多线程步骤,其中块由多个线程同时处理(即每个块将由不同的线程读取/处理/写入)。这在多线程步骤部分中进行了解释。

使用

AsyncItemProcessor/AsyncItemWriter
方法,仅并发执行项目处理器。请参阅异步处理器

© www.soinside.com 2019 - 2024. All rights reserved.