多文件输入

在单个 Step 中处理多个文件是一种常见需求。假设所有文件格式相同,MultiResourceItemReader 支持此类输入,适用于 XML 和平面文件的处理。考虑以下目录中的文件:spring-doc.cadn.net.cn

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

file-1.txt 和 file-2.txt 格式相同,出于业务原因,应将它们一起处理。MultiResourceItemReader 可用于通过通配符读取这两个文件。spring-doc.cadn.net.cn

以下示例展示了如何在 Java 中使用通配符读取文件:spring-doc.cadn.net.cn

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

以下示例展示了如何在 XML 中使用通配符读取文件:spring-doc.cadn.net.cn

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一样,添加额外的输入(在本例中为文件)可能会在重启时引发潜在问题。建议批处理作业在成功完成之前使用各自独立的目录。spring-doc.cadn.net.cn

输入资源通过使用 MultiResourceItemReader#setComparator(Comparator) 进行排序,以确保在重启场景中作业运行之间的资源顺序得以保留。