MultiResourceItemReader:在bean初始化时资源不存在

时间:2018-12-04 14:59:31

标签: spring-batch

场景: 具有2个步骤的Spring Batch作业:

  1. 用于下载csv文件的Tasklet(文件名之前未知) 运行时)到目录。
  2. 带有读取器的基于块的步骤,该读取器需要读取所有csv文件

挑战:

由于文件名未知,因此我们使用PathMatchingResourcePatternResolver.getResources()来获取resources

返回的资源的长度始终为0,因为在bean初始化时目录中没有文件。

@Bean
Resource[] resources() throws IOException {
    final PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
    final Resource[] resources = resolver.getResources("file:" + destinationDir + "/*.csv");
    return resources;
}

有什么想法吗?预先感谢!

1 个答案:

答案 0 :(得分:3)

您可以在Tasklet步骤中将文件名保存在JobExecutionContext内,然后在块步骤中使用这些名称来初始化资源。

Spring Batch文档中的更多详细信息:Configuring a Step

由于Step Scope Bean,Spring Batch中的这种后期绑定是可能的。您可以详细了解here