MultiResourceItemReader
は、複数のファイルをフォルダからロードします。SpringバッチジョブでItemWriterターゲットファイル名を変更するにはどうすればよいですか?
ファイルごとに、ItemWriter
が生成しているファイル名を変更したいと思います。しかし:どのように?
@Bean
public MultiResourceItemReader<String> reader() {
FlatFileItemReader<String> delegate = new FlatFileItemReader<>();
MultiResourceItemReader<String> r = new MultiResourceItemReader<>();
r.setResources(new PathMatchingResourcePatternResolver().getResources("*.csv"));
r.setDelegate(delegate);
return r;
}
@Bean
public FlatFileItemWriter<String> writer() {
FlatFileItemWriter<String> w = new FlatFileItemWriter<>();
w.setResource(new FileSystemResource("dynamicfile.txt); //how dynamically, eg depending on the input filename?
w.setLineAggregator(new PassThroughLineAggregator<>());
return w;
}
全く可能ですか?そうでない場合、どうすればItemWriter
を使って別のファイルにデータを書き込むことができますか?
感謝を洞察するために:
現在のパーティション分割についての詳細を読むことができます。両方とも有望ですが、次のユースケースで使用することをお勧めします:約20.000のzip形式のcsvファイル。それぞれ数MBです。すべてのファイルを読み込み、変換し(=データを取り除く)、最後に出力ファイルに書き込む必要があります。ですから、最後に出力ディレクトリに20.000のcsvファイルが必要です。どのような場合でも処理の順序は関係ありません。全体のプロセスは1日に数回実行する必要があります。この状況に最適な 'MultiResourcePartitioner'はありますか? – membersound
このユースケースでパーティショニングを使用できるのであれば、私はそうするでしょう。おそらく実装が簡単で、必要に応じてさらなるスケーリングが可能です。 –
私はパーティショナーを試みました、それは一般的に動作します。しかし、書き込まれたファイル名には、プロセッサ内部で最初に認識された値(ファイルの最初の行からの値)が含まれている必要があります。どのようにしてこの値を 'stepExecutionContext'として' FlatFileItemWriter'に渡して名前を考慮することができますか? – membersound