|
当前版本仍在开发中,尚不被视为稳定版本。最新稳定版请使用 Spring Batch 文档 6.0.2! |
多文件输入
在单个 Step 中处理多个文件是很常见的需求。假设这些文件都具有相同格式,那么 MultiResourceItemReader
可以同时支持 XML 和平面文件场景下的这类输入。看下面这个目录中的文件:
file-1.txt file-2.txt ignored.txt
file-1.txt 和 file-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 运行之间的资源顺序保持一致。
|