从 ExecutionContext 设置 IteamReader 输入

Set IteamReader input from ExecutionContext

我在 Spring Batch 中的第一步实际上是从服务器下载 CSV 并为其分配一个动态名称并将其存储在 ExecutionContext 中。

现在的问题是如何在创建 bean 时将输入文件的名称传递给 FlatFileItemReader。

举个例子:

@Bean
    public FlatFileItemReader<Customer> customerItemReader() {
        FlatFileItemReader<Customer> reader = new FlatFileItemReader<>();

        reader.setLinesToSkip(1);
        reader.setResource(new ClassPathResource("/data/customer.csv"));

        DefaultLineMapper<Customer> customerLineMapper = new DefaultLineMapper<>();

        DelimitedLineTokenizer tokenizer = new DelimitedLineTokenizer();
        tokenizer.setNames(new String[] {"id", "firstName", "lastName", "birthdate"});

        customerLineMapper.setLineTokenizer(tokenizer);
        customerLineMapper.setFieldSetMapper(new CustomerFieldSetMapper());
        customerLineMapper.afterPropertiesSet();

        reader.setLineMapper(customerLineMapper);

        return reader;
    }

请注意,reader.setResource(new ClassPathResource("/data/customer.csv")) 是在创建 bean 时 设置的。

如何将信息从 ExecutionContext 传递到 FlatFileItemReader 作为输入源?

我需要查找 Spring 批处理表吗?

创建您的 bean @StepScope@JobScope 并使用 @Value 获取值。

@Bean
@StepScope
public FlatFileItemReader<Customer> customerItemReader(@Value("#{stepExecutionContext['your.name']} String file) {
 // Bean creation logic here. 
}

现在,如果您愿意花时间阅读 the documentation,您就会自己阅读。