将多个@Value传递给java类中的@Bean

时间:2017-10-14 21:00:57

标签: java spring-boot annotations javabeans

我正在尝试编写一个包含两个步骤的Spring Batch作业。它们都是相同的步骤但具有不同的文件位置。因此,我需要将多个字符串传递给作业bean,以使步骤知道将不同文件发送到何处。但是,我尝试传递Resource值,我得到一个NoSuchBeanDefinitionException。我发现这个问题的答案是我需要在bean中添加一个@Value来告诉它bean需要一个参数来工作。  但这仅适用于一个值。

有没有办法使用java配置将多个@Values传递给bean?以下是我正在使用的代码。

@Value("#{'${batch.outputFile}'}")
Resource outputFilePath;

@Value("#{'${batch.outputFileTrg}'}")
Resource outputFilePathTrg;

@Bean
public Step toServerStep(Resource outputFile) {
    return stepBuilderFactory.get("toServerStep")
                                .chunk(1)
                                .reader(xmlFileItemReader())
                                .writer((ItemWriter<? super Object>) flatFileItemWriter(outputFile))
                                .build();
}

@Bean
public Job fileToServerJob(JobBuilderFactory jobBuilderFactory){
    return jobBuilderFactory.get("fileToServerJob")
            .start(toServerStep(outputFilePath1))
            .next(toServerStep(outputFilePath2))
            .build();

}

2 个答案:

答案 0 :(得分:0)

你输了一个字符串,但是你不应该放入Rescource吗?有一个不太好的例子曾经为我工作here。 Maby它可以帮到你。

答案 1 :(得分:0)

您可以传递分隔的String作为属性,并将其拆分为Value对象的列表。

@Value("#{'${batch.outputFiles}'.split(',')}")
private List<String> outputFilePaths;

使用以下

的application.property
batch.outputFiles=/tmp/a,/tmp/b,/tmp/c

然后,您可以使用这些路径字符串来获取编写者使用的相应资源。