多文件输入

在单个 `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 运行之间资源顺序得到保留。