Saya membaca dari Oracle dan menulis ke file CSV. Saya memiliki satu langkah yang membaca dan menulis ke file CSV. Saya menerapkan ChunkListener jadi saya tahu berapa banyak catatan yang ditulis.

Saya ingin dapat menulis cuplikan file yang menunjukkan jumlah catatan yang ditulis ke file saya. Saya menerapkan FlatFileFooterCallback tetapi tidak dapat menemukan cara untuk mendapatkan data dari StepExecution ("readCount") ke FlatFileFooterCallback saya.

Saya kira saya berjuang dengan cara mendapatkan akses ke Pekerjaan, Lingkup langkah dalam tulisan saya.

Setiap contoh, atau tautan akan sangat membantu. Saya menggunakan [Spring Batch / Boot] jadi saya semua dijelaskan. Saya dapat menemukan contoh xml, jadi mungkin hal beranotasi ini lebih rumit.

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;
}
0
CardsFan 10 Januari 2018, 17:56

1 menjawab

Jawaban Terbaik

Anda dapat menerapkan CustomFooterCallback sebagai berikut:

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());
    }

}

Kemudian di kelas @Configuration:

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

Dan gunakan di Writer:

csvFileWriter.setFooterCallback(customFooterCallback());

Dengan cara ini, Anda memiliki akses ke StepExecution untuk membaca data sesuai kebutuhan.

3
lzagkaretos 10 Januari 2018, 16:16