首页 > 解决方案 > Spring Batch-重构@StepScope bean

问题描述

我面临一个问题。当我将 FlatFileItemReader 和 Step 移动到单独的配置文件中时,它停止工作。

实际问题是它无法获取 jobParameters。

@Configuration
public class FileReader {


    @Bean("personFileReader")
    @StepScope
    public FlatFileItemReader<Person> personFileReader(@Value("#(jobParameters['customerFile']") FileSystemResource fileName) {

        System.out.println(
                String.format("fileName = %s", fileName));

        return new FlatFileItemReaderBuilder<Person>().name("personItemReader").resource(fileName).fixedLength()
                .columns(getRange()).names(getNames()).targetType(Person.class).build();

    }

批量配置

@Configuration
@EnableBatchProcessing
public class BatchConfiguration extends DefaultBatchConfigurer {

@Autowired
@Qualifier("personFileReader")
private FlatFileItemReader<Person> personFileReader;


@Bean
public Step step() {
    return this.stepBuilderFactory.get("chunkStep").<Person, Person>chunk(10).reader(personFileReader)
            .writer(dummyWriter).build();

}

错误

Caused by: java.lang.IllegalStateException: Input resource must exist (reader is in 'strict' mode): file [D:\Data\Study\spring-batch\batch-process\#(jobParameters['customerFile']]

我不知道我做错了什么。

标签: javaspringspring-bootspring-batch

解决方案


@Value 注释似乎不正确

@Value("#(jobParameters['customerFile']")

应该

@Value("#{jobParameters['customerFile']}")

推荐阅读