我正在使用Spring Batch 4(批注),并且需要执行一个步骤,即读取XML文件并将其写入文本文件。在读取XML之前,我使用了自定义读取器和简单的平面写入器(spring batch引用)。我检查了此XML是否为文件,如果是,我将处理从XML到文本的转换。但是,如果文件无效,我将在阅读器中返回null
。
问题是当我在阅读器中返回null
时,书写器仍在工作,并将空文件放入输出文件夹。解决办法是什么?
@Bean public FlatFileItemWriter itemWriter() {
return
new FlatFileItemWriterBuilder<Foo>()
.name("itemWriter")
.resource(new FileSystemResource("target/test-outputs/output.txt"))
.lineAggregator(new PassThroughLineAggregator<>())
.build();
}
答案 0 :(得分:1)
问题是当我在读取器中返回null时,写入器仍在工作,并将空文件放入输出文件夹。解决办法是什么?
您可以在shouldDeleteIfEmpty
上设置FlatFileItemWriter
,如果输出文件为空,则将其删除。此处的更多详细信息:https://docs.spring.io/spring-batch/4.0.x/api/org/springframework/batch/item/file/builder/FlatFileItemWriterBuilder.html#shouldDeleteIfEmpty-boolean-
但是如果文件无效,我将在阅读器中返回null。
返回null表示数据源有效且已用尽(可能为空)。对于无效的数据源,我将引发异常并使步骤失败。另一个解决方案是,如果找不到任何工作,则使用NoWorkFoundStepExecutionListener
使该步骤失败。有关此侦听器的更多详细信息,请点击此处:https://docs.spring.io/spring-batch/4.0.x/reference/html/common-patterns.html#handlingStepCompletionWhenNoInputIsFound