【发布时间】:2015-04-16 11:36:34
【问题描述】:
我正在使用 FlatFileItemReader 处理 CSV 文件。
有时我在输入文件中得到空行。
当这种情况发生时,整个步骤都停止了。我想跳过这些行并正常进行。
我尝试将异常处理程序添加到步骤中,以便捕获执行而不是让整个步骤都弯腰:
@Bean
public Step processSnidUploadedFileStep() {
return stepBuilderFactory.get("processSnidFileStep")
.<MyDTO, MyDTO>chunk(numOfProcessingChunksPerFile)
.reader(snidFileReader(OVERRIDDEN_BY_EXPRESSION))
.processor(manualUploadAsyncItemProcessor())
.writer(manualUploadAsyncItemWriter())
.listener(logProcessListener)
.throttleLimit(20)
.taskExecutor(infrastructureConfigurationConfig.taskJobExecutor())
.exceptionHandler((context, throwable) -> logger.error("Skipping record on file. cause="+ ((FlatFileParseException)throwable).getCause()))
.build();
}
由于我正在处理 chunks 当空白行到达并捕获异常时发生的情况是整个块被 跳过(该块可能包含 CSV 文件中的有效行并且它们也被跳过)
知道在分块处理文件时如何正确执行此操作吗?
谢谢, 射线。
编辑我的代码后。仍然没有跳过:
public Step processSnidUploadedFileStep() {
SimpleStepBuilder<MyDTO, MyDTO> builder = new SimpleStepBuilder<MyDTO, MyDTO>(stepBuilderFactory.get("processSnidFileStep"));
return builder
.<PushItemDTO, PushItemDTO>chunk(numOfProcessingChunksPerFile)
.faultTolerant().skip(FlatFileParseException.class)
.reader(snidFileReader(OVERRIDDEN_BY_EXPRESSION))
.processor(manualUploadAsyncItemProcessor())
.writer(manualUploadAsyncItemWriter())
.listener(logProcessListener)
.throttleLimit(20)
.taskExecutor(infrastructureConfigurationConfig.taskJobExecutor())
.build();
}
【问题讨论】:
标签: spring csv spring-batch spring-batch-admin