在 java class 中将多个 @Value 传递到 @Bean
Passing multiple @Value into a @Bean in a java class
我正在尝试编写一个包含两个步骤的 Spring 批处理作业。它们都是相同的步骤,但文件位置不同。因此,我需要将多个字符串传递到作业 bean 中,让该步骤知道将不同文件发送到哪里。但是,如果我尝试传递资源值,我会得到一个 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();
}
你正在输入一个字符串,但你不应该输入一个资源吗?得到一个曾经对我有用的不太好的例子 here。或许能帮到你。
您可以将分隔的字符串作为 属性 传递,并将其分解为您的值对象的列表。
@Value("#{'${batch.outputFiles}'.split(',')}")
private List<String> outputFilePaths;
与你application.property与以下
batch.outputFiles=/tmp/a,/tmp/b,/tmp/c
然后您可以使用这些路径字符串来获取适合您的作者使用的资源。
我正在尝试编写一个包含两个步骤的 Spring 批处理作业。它们都是相同的步骤,但文件位置不同。因此,我需要将多个字符串传递到作业 bean 中,让该步骤知道将不同文件发送到哪里。但是,如果我尝试传递资源值,我会得到一个 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();
}
你正在输入一个字符串,但你不应该输入一个资源吗?得到一个曾经对我有用的不太好的例子 here。或许能帮到你。
您可以将分隔的字符串作为 属性 传递,并将其分解为您的值对象的列表。
@Value("#{'${batch.outputFiles}'.split(',')}")
private List<String> outputFilePaths;
与你application.property与以下
batch.outputFiles=/tmp/a,/tmp/b,/tmp/c
然后您可以使用这些路径字符串来获取适合您的作者使用的资源。