FlatFileFooterCallback - 如何访问StepExecution For Count

时间:2018-01-10 14:56:24

标签: spring-boot spring-batch

我正在阅读Oracle并写入CSV文件。我有一步读取和写入CSV文件。我实现了一个ChunkListener,所以我知道写了多少条记录。

我希望能够编写一个文件预告片,显示写入我文件的记录数。我实现了FlatFileFooterCallback,但无法弄清楚如何从StepExecution(" readCount")获取数据到我的FlatFileFooterCallback。

我想我正在努力学习如何在写作中访问Job,Step范围。

任何示例或链接都会有所帮助。我正在使用[Spring Batch / Boot],所以我都注释了。我可以找到xml示例,所以这个带注释的东西可能更复杂。

ItemWriter<Object> databaseCsvItemWriter() {

    FlatFileItemWriter<Object> csvFileWriter = new FlatFileItemWriter<>();

    String exportFileHeader = "one,two,three";
    StringHeaderWriter headerWriter = new StringHeaderWriter(exportFileHeader);
    csvFileWriter.setHeaderCallback(headerWriter);

    String exportFilePath = "/tmp/students.csv";
    csvFileWriter.setResource(new FileSystemResource(exportFilePath));

    LineAggregator<McsendRequest> lineAggregator = createRequestLineAggregator();
    csvFileWriter.setLineAggregator(lineAggregator);

    csvFileWriter.setFooterCallback(headerWriter);

    return csvFileWriter;
}

1 个答案:

答案 0 :(得分:2)

您可以按如下方式实施CustomFooterCallback

public class CustomFooterCallback implements FlatFileFooterCallback {

    @Value("#{StepExecution}")
    private StepExecution stepExecution;

    @Override
    public void writeFooter(Writer writer) throws IOException {
        writer.write("footer - number of items read: " + stepExecution.getReadCount());
        writer.write("footer - number of items written: " + stepExecution.getWriteCount());
    }

}

然后在@Configuration课程中:

@Bean
@StepScope
public FlatFileFooterCallback customFooterCallback() {
    return new CustomFooterCallback();
}

并使用Writer

csvFileWriter.setFooterCallback(customFooterCallback());

这样,您可以访问StepExecution以便根据需要读取数据。