多檔案輸入
在單個 `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` 一樣,在重啟時新增額外的輸入(在這種情況下是一個檔案)可能會導致潛在問題。建議批處理 Job 使用自己的獨立目錄,直到成功完成。
輸入資源使用 `MultiResourceItemReader#setComparator(Comparator)` 進行排序,以確保在重啟場景下 Job 執行之間資源順序得到保留。 |