マルチファイル入力

単一の Step 内で複数のファイルを処理することは一般的な要件です。すべてのファイルのフォーマットが同じであると仮定すると、MultiResourceItemReader は XML およびフラットファイル処理の両方でこの型の入力をサポートします。ディレクトリ内の次のファイルを検討してください。

file-1.txt  file-2.txt  ignored.txt

file-1.txt と file-2.txt は同じ形式であり、ビジネス上の理由から、一緒に処理する必要があります。MultiResourceItemReader は、ワイルドカードを使用して両方のファイルを読み込むために使用できます。

  • Java

  • XML

次の例は、Java でワイルドカードを使用してファイルを読み取る方法を示しています。

Java 構成
@Bean
public MultiResourceItemReader multiResourceReader(@Value("classpath:data/input/file-*.txt") Resource[] resources) {
	return new MultiResourceItemReaderBuilder<Foo>()
					.delegate(flatFileItemReader())
					.resources(resources)
					.build();
}

次の例は、XML でワイルドカードを使用してファイルを読み取る方法を示しています。

XML 構成
<bean id="multiResourceReader" class="org.spr...MultiResourceItemReader">
    <property name="resources" value="classpath:data/input/file-*.txt" />
    <property name="delegate" ref="flatFileItemReader" />
</bean>

参照されるデリゲートは、単純な FlatFileItemReader です。上記の構成では、両方のファイルから入力を読み取り、ロールバックと再起動のシナリオを処理します。他の ItemReader と同様に、再入力時に余分な入力(この場合はファイル)を追加すると、潜在的な問題が発生する可能性があることに注意してください。バッチジョブは、正常に完了するまで、個々のディレクトリで動作することをお勧めします。

入力リソースは、MultiResourceItemReader#setComparator(Comparator) を使用して順序付けされ、再始動シナリオでのジョブ実行間でリソースの順序が保持されるようにします。