春季批处理:当读者返回null时停止作家

时间:2018-08-09 18:27:49

标签: java xml spring xsd spring-batch

我正在使用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();
}

1 个答案:

答案 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