从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,您将自己阅读。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...