我正在使用Spring批处理来处理csv文件。
这是我在工作中的一步:
@Bean
public Step processSnidUploadedFileStep() {
return stepBuilderFactory.get("testJob")
.<MyItem, MyItem>chunk(1) //important to be one in this case to commit after every line read
.reader(..)
.processor(processor(...))
.writer(writer)
.taskExecutor(infrastructureConfigurationService.taskExecutor())
.build();
}
正如您所看到的,我添加了taskExecutor,以便让多个线程读取同一文件中的行以便更快地执行。
public class BatchConfiguration implements InfrastructureConfigurationService {
..
@Bean
public TaskExecutor taskExecutor() {
ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
taskExecutor.setMaxPoolSize(4);
taskExecutor.afterPropertiesSet();
return taskExecutor;
}
现在我的writer()中有一个测试用途,我添加了Thread.sleep(10000)以查看我实际并行运行(并行读取文件中的多行):
@Override
public void write(List<? extends MyItem> items) throws Exception {
for (MyItem item : items) {
log.info(item.toString();
Thread.sleep(1000000);
}
一旦我调用Thread.sleep(..)行,整个作业就会卡住..(我看不到其他线程调用的方法 - 在我的例子中4个线程
我读到我需要将文件拆分成小文件而不是使用分区?那是怎么做的?我错过了什么吗?
谢谢。