当前版本仍在开发中,尚不被视为稳定版本。最新稳定版请使用 Spring Batch 文档 6.0.2!

多文件输入

在单个 Step 中处理多个文件是很常见的需求。假设这些文件都具有相同格式,那么 MultiResourceItemReader 可以同时支持 XML 和平面文件场景下的这类输入。看下面这个目录中的文件:

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

file-1.txtfile-2.txt 格式相同,并且出于业务原因需要一起处理。此时可以通过通配符配合 MultiResourceItemReader 同时读取这两个文件。

  • Java

  • XML

下面的示例展示了如何在 Java 中通过通配符读取文件:

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

下面的示例展示了如何在 XML 中通过通配符读取文件:

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

这里引用的 delegate 是一个简单的 FlatFileItemReader。上述配置会从两个文件中读取输入,并处理回滚和重启场景。 需要注意的是,和任何 ItemReader 一样,额外增加输入资源(这里指额外文件)在重启时可能带来潜在问题。 建议批处理 job 在成功完成之前只处理自己独立目录中的文件。

通过 MultiResourceItemReader#setComparator(Comparator) 对输入资源排序, 以确保在重启场景下,不同 job 运行之间的资源顺序保持一致。