2017-12-25 34 views
0

Spring Boot 신청서에 Spring Batch을 사용하고 있습니다. Spring Boot 버전은 1.3.5.RELEASE입니다.스프링 배치 : 종합 품목 작가를 만드는 방법은 무엇입니까?

CompositeItemWriter을 사용하여 항목 목록을 먼저 WriterOne에서 압축/압축 한 다음 WriterTwo로 전달하여 데이터베이스에 기록합니다.

@Component 
public class Writer2 implements org.springframework.batch.item.ItemWriter<SimpleObject> { 
    @Override 
    public void write(List<? extends SimpleObject> list) throws Exception { 
     for(SimpleObject simpleObject: list){ 
      // the file object meta data are being writtren to database. 
     } 
    } 
} 
여기

내가 작업 단계를 초기화하고 그것을 대신 ItemWriter의 CompositeItemWriter을 제공하기 위해 노력하고 있습니다 :

@Component 
public class Writer1 implements org.springframework.batch.item.ItemWriter<SimpleObject> { 
    @Override 
    public void write(List<? extends SimpleObject> list) throws Exception { 
     for(SimpleObject simpleObject: list){ 
      // code which compresses the file 
     } 
    } 
} 

것은 여기 내 작가 2 :

여기 내 작가 1입니다. 코드 아래

Error:(337, 83) java: cannot find symbol 
    symbol: method build() 
    location: class org.springframework.batch.core.step.builder.StepBuilderHelper 

답변

0

이 내 경우 일 :

CompositeItemWriter compositeItemWriter = new CompositeItemWriter(); compositeItemWriter.setDelegates(Arrays.asList(writer1,writer2)); TaskletStep processingStep = stepBuilderFactory.get(getLabel() + "-" + UUID.randomUUID().toString()) .<SimpleObject, SimpleObject>chunk(5) .reader(reader) .processor(processor) .writer(compositeItemWriter).transactionManager(txManager).build(); 

그런 다음 코드는 컴파일시 오류가 있습니다. 여기

@Component 
public class Writer2 implements ItemStreamWriter<SimpleObject>, org.springframework.batch.item.ItemWriter<SimpleObject> { 
    @Override 
    public void write(List<? extends SimpleObject> list) throws Exception { 
     for(SimpleObject simpleObject: list){ 
      // some logic 
     } 
    } 

    @Override 
    public void open(ExecutionContext executionContext) throws ItemStreamException { 

    } 

    @Override 
    public void update(ExecutionContext executionContext) throws ItemStreamException { 

    } 

    @Override 
    public void close() throws ItemStreamException { 

    } 
} 

내가 Tasklet를 초기화하고 그것을 CompositeItemWriter을 제공하기 위해 노력하고 있어요 : 여기

@Component 
public class Writer1 implements ItemStreamWriter<SimpleObject>,org.springframework.batch.item.ItemWriter<SimpleObject> { 
    @Override 
    public void write(List<? extends SimpleObject> list) throws Exception { 
     for(SimpleObject simpleObject: list){ 
      // some logic 
      } 
     } 
    } 

    @Override 
    public void open(ExecutionContext executionContext) throws ItemStreamException { 

    } 

    @Override 
    public void update(ExecutionContext executionContext) throws ItemStreamException { 

    } 

    @Override 
    public void close() throws ItemStreamException { 

    } 
} 

내 작가 2 : 여기에

내 작가 1

CompositeItemWriter<SimpleObject> compositeItemWriter = new CompositeItemWriter<>(); 
       List<org.springframework.batch.item.ItemWriter<? super SimpleObject>> delegates = new ArrayList<>(); 
       delegates.add(writer1); 
       delegates.add(writer2); 
       compositeItemWriter.setDelegates(delegates); 

       TaskletStep processingStep = stepBuilderFactory.get(getLabel() + "-" + UUID.randomUUID().toString()) 
         .<SimpleObject, SimpleObject>chunk(5) 
         .reader(reader) 
         .processor(processor) 
         .writer(compositeItemWriter) 
         .stream(writer1) 
         .stream(writer2) 
         .transactionManager(txManager) 
         .build(); 

내가 놓친 것이 있거나 잘못된 정보가 있으면 알려주세요.