【发布时间】:2022-04-26 01:34:38
【问题描述】:
我有一个弹簧批处理作业,定义如下。
<batch:step id="convert">
<batch:tasklet >
<batch:chunk reader="contentItemReader" writer="contentItemWriter"
processor="processor" commit-interval="10000" >
</batch:chunk>
</batch:tasklet>
</batch:step>
contentItemReader如下。
@Bean
public StaxEventItemReader contentItemReader() {
StaxEventItemReader reader = new StaxEventItemReader();
reader.setFragmentRootElementName("ContentItem");
reader.setResource(new FileSystemResource(baseDirectory.concat(inputFile)));
reader.setUnmarshaller(contentItemUnmarshaller());
return reader;
}
一切都很好,只是它比我想要的慢了一点。我知道这个阅读器不是线程安全的。所以我认为我不能将 taskExecutor 添加到 tasklet 中。 ContentItems 不相互依赖,因此我想将数据并行输入处理器。 ItemProcessing 可能相当耗时。所以虽然我知道我不能拥有多线程阅读器,但我应该能够拥有多线程项目处理。
ItemWriters 也需要是单线程的,因为我使用的是 flatFile ItemWriter。
最好的方法是什么?
【问题讨论】:
标签: spring spring-batch