我正在尝试编写一个包含两个步骤的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();
}
答案 0 :(得分:0)
你输了一个字符串,但是你不应该放入Rescource吗?有一个不太好的例子曾经为我工作here。 Maby它可以帮到你。
答案 1 :(得分:0)
您可以传递分隔的String作为属性,并将其拆分为Value对象的列表。
@Value("#{'${batch.outputFiles}'.split(',')}")
private List<String> outputFilePaths;
使用以下
的application.propertybatch.outputFiles=/tmp/a,/tmp/b,/tmp/c
然后,您可以使用这些路径字符串来获取编写者使用的相应资源。