0

現在、Spring Batch CSV Export に取り組んでいます。Chunk ベースのリーダ、ライタ、プロセッサが使用されます。読み取りと処理は問題なく動作しますが、FlatFileItemWriter は常に出力 CSV ファイルを上書きします。ジョブがファイルが存在するかどうかを確認し、存在する場合は fileName をインクリメントして新しいファイルに書き込みます。

私の現在のコードは次のとおりです。ファイルが存在するかどうかを確認し、ライターが使用する新しい文字列を返すヘルパー クラスです。

import java.io.File;

import org.springframework.stereotype.Component;

@Component
public class OrderFileManager {

    private final String orderDesc = "order";
    private final String fileEnding = ".csv";

    public String getEmptyOrderNameString() {

        int fileNumber = 1;
        String answer = orderDesc + fileNumber + fileEnding;

        while (new File(answer).exists()) {
            fileNumber = fileNumber + 1;
            answer = orderDesc + fileNumber + fileEnding;
        }
        return answer;
    }
}

私のアイテムライター:

    @Bean
    public FlatFileItemWriter<UltravisionOrder> writer(String fileName) {
        FlatFileItemWriter<UltravisionOrder> writer = new FlatFileItemWriter<UltravisionOrder>();  
        writer.setResource(new FileSystemResource(fileName));
        DelimitedLineAggregator<UltravisionOrder> delimitedLineAggregator = new DelimitedLineAggregator<UltravisionOrder>();
        delimitedLineAggregator.setDelimiter(";");
        BeanWrapperFieldExtractor<UltravisionOrder> fieldExtractor = new BeanWrapperFieldExtractor<UltravisionOrder>();
        fieldExtractor.setNames(new String[] { "col1", "col2", "col3", ... });
        delimitedLineAggregator.setFieldExtractor(fieldExtractor);
        writer.setLineAggregator(delimitedLineAggregator);
        return writer;
    }

ジョブが実行されるたびに、FileWriter は同じ出力ファイルに書き込みます。OrderFileManager は、ジョブで自動配線されます。そしてライターは OrderFileManager を受け取ります。パラメータとして getEmptyOrderNameString() 。

4

1 に答える 1