2017-10-14 9 views
1

2つのステップを持つSpringバッチジョブを作成しようとしています。両方とも同じステップですが、ファイルの場所が異なります。そのため、異なるファイルをどこに送るかをステップに伝えるために、複数の文字列をジョブBeanに渡す必要があります。しかし、私は、リソースの値を渡そうとすると、私はNoSuchBeanDefinitionExceptionを取得します。私が見つけた答えは、Beanに@Valueを追加してBeanが動作するためのパラメータが必要であることを伝える必要があるということです。 しかし、これは1つの値にすぎません。Javaクラスの@Beanに複数の@Valueを渡す

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

プロパティファイルから、リソースを取得できません。あなたはいくつかのURLやデータを取得することができます例Integerなど – Mikhail

答えて

0

区切り文字列をプロパティとして渡して、Valueオブジェクトのリストに分割することができます。あなたのapplication.propertyで

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

あなたは、あなたのライターが使用する適切なリソースをつかむために、これらのパス文字列を使用することができ、次の

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

と。

0

あなたは、文字列に入れているが、あなたはRescourceに入れるべきではないのですか?一度私のために働いたので、あまり良い例ではないhereを得た。マビーそれはあなたを助けることができます。

関連する問題