多文件输入
在单个 Step 中处理多个文件是一种常见需求。假设所有文件具有相同的格式,MultiResourceItemReader 支持这种类型的输入,适用于 XML 和平文件处理。考虑以下目录中的文件:
file-1.txt file-2.txt ignored.txt
file-1.txt 和 file-2.txt 格式相同,并且出于业务原因,应一起处理。通过使用通配符,MultiResourceItemReader 可用于读取这两个文件。
- Java
- XML
以下示例展示了如何在 Java 中使用通配符读取文件:
@Bean
public MultiResourceItemReader multiResourceReader(@Value("classpath:data/input/file-*.txt") Resource[] resources) {
return new MultiResourceItemReaderBuilder<Foo>()
.delegate(flatFileItemReader())
.resources(resources)
.build();
}
以下示例展示了如何在 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) 进行排序,以确保在重启场景下作业运行之间的资源顺序保持一致。