2017-12-21 11 views
0

春のバッチ4は、それをよりきれいにするためにビルダーを追加しましたように春に定義された私のリーダーConfigが春のバッチ4リーダーの設定に春バッチ3読者の変換

@Bean 
    @Qualifier("myReader") 
    @StepScope 
    public FlatFileItemReader<POJO> myReader(@Value("#{stepExecutionContext['fileName']}") String filename) { 

     FlatFileItemReader<POJO> reader = new FlatFileItemReader<POJO>();  


     try { 

      reader.setResource(new UrlResource(filename)); 
     } catch (MalformedURLException e) { 
     } 
     reader.setLinesToSkip(1); 
     reader.setLineMapper(new DefaultLineMapper<POJO>() {{ 
      setLineTokenizer(new DelimitedLineTokenizer() {{ 
       setNames(FileHeader); 
       setDelimiter(","); 

      }}); 
      setFieldSetMapper(new BeanWrapperFieldSetMapper<POJO>() {{ 
       setTargetType(POJO.class); 
      }}); 
     }}); 
     return reader; 
    } 

をbatch3ています。 以下はSpringBatch 4の設定です。

@Bean 
    @Qualifier("myReader") 
    @StepScope 
    public FlatFileItemReader<POJO> myReader(
      @Value("#{stepExecutionContext['fileName']}") String filename) throws MalformedURLException { 

     return new FlatFileItemReaderBuilder<POJO>().resource(new UrlResource(filename)) 
       .name("myReadersdfs") 
       .delimited() 
       .delimiter(",") 
       .names(FileHeader) 
       .targetType(POJO.class) 
       .linesToSkip(1) 
       .build(); 

    } 

ビルダーは実際にコードを短くしてきれいにします。

しかし、なぜ私は理解できないのですか?.name( "")は必須です? とはどのように使用されるのですか? 修飾子のように機能しますか?

答えて

0

name(String value)は、ExecutionContextに状態を格納するために使用されるキーを生成するためにフレームワークによって使用されるため、必須です。以前のバージョン(ビルダーを使用しない場合)では、その属性の構成はオプションでした。問題は、それを構成しないことによって、ExecutionContext内のキーの命名で衝突が発生する可能性があることです。名前を設定する必要があるため、衝突の可能性は低くなります。

関連する問題