2017-10-14 97 views
1

我想写一个有两个步骤的Spring Batch作业。他们都是同一步,但具有不同的文件位置。因此,我需要将多个字符串传递给作业bean,让步骤知道发送不同文件的位置。但是,我尝试传递资源值,我得到一个NoSuchBeanDefinitionException。我发现的答案是,我需要向bean添加一个@Value来告诉它bean需要一个参数来工作。 但这只是一个值。将多个@Value传递到java类中的@Bean中

有没有办法将多个@Values传递给使用java配置的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

从属性文件你不能得到资源。你只能得到一些网址或数据,例如Integer等。 – Mikhail

回答

0

您可以传递一个分隔字符串作为属性,并将其拆分为您的Value对象的列表。

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

与您application.property具有以下

batch.outputFiles=/tmp/a,/tmp/b,/tmp/c 

然后,您可以使用这些路径字符串抓取适当的资源通过刻录机的使用。

0

你把一个字符串,但你不应该放在一个Rescource?有一个不是很好的例子,曾经为我工作here。 Maby它可以帮助你。

相关问题