2017-10-25 21 views
0

私は設定が必要なバネバッチジョブがあります。この意味で、渡されたものに応じて異なるファイルを読み込み、読み手を構築することができ、おそらくそれぞれの異なる読み手が独自の作家を持つことになります。下の例では1つのファイルを読み込み、ライターに電話します。どうすればload_area.txtを動的にすることができますか?スプリングバッチは実行時に異なるファイルを読み込みます

@Bean 
    public Step orderStep() { 
     return stepBuilderFactory.get("loadAStep") 
       .<FieldSetter, FieldSetter> chunk(3) 
       .reader(reader()) 
       .processor(processor()) 
       .writer(writer()) 
       .build(); 
    } 

    @Bean 
    public FlatFileItemReader<FieldSetter> reader() { 
     FlatFileItemReader<FieldSetter> reader = new FlatFileItemReader<FieldSetter>(); 
     reader.setResource(new ClassPathResource("load_a.txt")); 
     reader.setLineMapper(new DefaultLineMapper<GenericFieldSetter>() {{ 
      setLineTokenizer(new DelimitedLineTokenizer("|") {{ 
       setNames(new String[] { "sCode","cName"}); 
      }}); 
      setFieldSetMapper(new BeanWrapperFieldSetMapper<FieldSetter>() {{ 
       setTargetType(FieldSetter.class); 
      }}); 
     }}); 
     return reader; 
    } 

    @Bean 
    public ItemWriter<GenericFieldSetter> writer() { 
    return new LoadAreaItemWriter(); 
    } 

load_a.txt 22 | RRR

load_b.txt AA | ABCDED | 123 | 0000私が何であるかに応じて、実行時にload_a.txtまたはload_b.txtを読みたい

渡され、自身の作家を書く。それは.txtまたは任意のタイプになる可能性があります。

FieldSetter.javaはあなたが動的にファイル名を渡すjobExecutionContext/stepExecutionContextを使用することができますセッターとゲッター

答えて

0

を持っています。あなたのbeanは@StepScopeであるべきです。

これはあなたがjobExecutionContext/stepExecutionContext

@Bean 
@StepScope 
    public FlatFileItemReader<FieldSetter> reader("#{jobExecutionContext['fileName']}") final String fileName ,@Value("#{stepExecutionContext['fileName']}") String filename1) { 
     FlatFileItemReader<FieldSetter> reader = new FlatFileItemReader<FieldSetter>(); 
     reader.setResource(new ClassPathResource(fileName)); 
     reader.setLineMapper(new DefaultLineMapper<GenericFieldSetter>() {{ 
      setLineTokenizer(new DelimitedLineTokenizer("|") {{ 
       setNames(new String[] { "sCode","cName"}); 
      }}); 
      setFieldSetMapper(new BeanWrapperFieldSetMapper<FieldSetter>() {{ 
       setTargetType(FieldSetter.class); 
      }}); 
     }}); 
     return reader; 
    } 
にアクセスする方法であります
関連する問題