2017-12-21 21 views
0

봄 3 독자를 변환하는 것은 다음은 스프링 배치 (4) 더 깨끗하기 위해 빌더를 추가함에 따라봄의 배치를 배치 4 리더 설정

@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에 상태를 저장하는 데 사용되는 키를 생성 할 때 사용되므로 필수입니다. 이전 v 전 (빌더를 사용하지 않기로 선택한 경우)에서이 속성을 구성하는 것은 선택 사항이었습니다. 문제는 구성하지 않음으로써 ExecutionContext 내의 키 이름 지정에서 충돌이 발생할 수 있다는 것입니다. 이름을 구성하도록 요구함으로써 충돌 가능성을 줄입니다.