Java spring批处理:读卡器返回null时停止编写器
我正在使用SpringBatch 4(annotation),有一项工作是执行一个步骤,读取XML文件并写入文本文件。在阅读XML之前,我使用了一个自定义读取器和一个简单的平面编写器(SpringBatch参考)。我检查了这个XML是否是一个文件,如果是,我将处理从XML到文本的转换。但是如果文件无效,我将在读卡器中返回Java spring批处理:读卡器返回null时停止编写器,java,xml,spring,xsd,spring-batch,Java,Xml,Spring,Xsd,Spring Batch,我正在使用SpringBatch 4(annotation),有一项工作是执行一个步骤,读取XML文件并写入文本文件。在阅读XML之前,我使用了一个自定义读取器和一个简单的平面编写器(SpringBatch参考)。我检查了这个XML是否是一个文件,如果是,我将处理从XML到文本的转换。但是如果文件无效,我将在读卡器中返回null 问题是,当我在读卡器中返回null时,编写器仍在工作,并将一个空文件放入输出文件夹。解决办法是什么 @Bean public FlatFileItemWriter it
null
问题是,当我在读卡器中返回null
时,编写器仍在工作,并将一个空文件放入输出文件夹。解决办法是什么
@Bean public FlatFileItemWriter itemWriter() {
return
new FlatFileItemWriterBuilder<Foo>()
.name("itemWriter")
.resource(new FileSystemResource("target/test-outputs/output.txt"))
.lineAggregator(new PassThroughLineAggregator<>())
.build();
}
@Bean public FlatFileItemWriter itemWriter(){
回来
新的FlatFileItemWriterBuilder()
.name(“项目作者”)
.resource(新文件系统资源(“target/test outputs/output.txt”))
.lineAggregator(新的PassThroughLineAggregator())
.build();
}
问题是,当我在读卡器中返回null时,编写器仍在工作,并将一个空文件放入输出文件夹。解决办法是什么
您可以在FlatFileItemWriter
上设置shouldDeleteIfEmpty
,如果输出文件为空,则会将其删除。有关这方面的详细信息,请参见:
但是如果文件无效,我会在读取器中返回null
返回null表示数据源有效且已耗尽(可能为空)。对于无效的数据源,我会抛出一个异常并使步骤失败。另一种解决方案是使用NoWorkFoundStepExecutionListener
在找不到工作时使步骤失败。有关此侦听器的更多详细信息,请参见: