在运行时定义文件名 - Spring 批处理

Defining file name at runtime - Spring Batch

我需要构建一个 spring 批处理应用程序以每天从预定义的文件夹中读取一个文件。文件名有一个前缀模式,但它以当前日期结尾。例如,第一天这个文件将被命名为 foo_20210323,而在第二天另一个文件将被放置在同一个文件夹中,名称为 foo_20210324。我的 Spring-batch 应用程序每天都在考虑编译时创建的文件名。 如何更改应用程序以便在运行时定义文件名?

有几种方法可以做到这一点,具体取决于您将当前日期传递给作业的方式(作为作业参数,使用系统 属性,等等)。

如果将日期作为作业参数传递,则可以使用步进范围项 reader 并在运行时从作业参数中注入值。这是一个例子:

@Bean
@StepScope
public FlatFileItemReader<String> itemReader(@Value("#{jobParameters['date']}") String date) {
   return new FlatFileItemReaderBuilder<>()
          .resource(new FileSystemResource("/data/in/foo_" + date))
          // set other properties
          .build();
}

您可以在参考文档的 Late Binding of Job and Step Attributes 部分找到更多详细信息。