2017-12-25 10 views
0

Spring BatchSpring Bootアプリケーションで使用しています。 Spring Bootのバージョンは1.3.5.RELEASEです。Springバッチ:コンポジットアイテムライターの作成方法

CompositeItemWriterを使用しようとしています。アイテムのリストは、まずWriterOneによって圧縮/圧縮され、WriterTwoに渡され、そこでデータベースに書き込まれます。ここで

は私の作家、1:ここでは

@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:

@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を提供しようとしていますされています。

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(); 

その後のコードでは、時間のエラーをコンパイルできます:

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

答えて

0

このコードの下に私の場合で働いていました。ここで

私の作家、1:

@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である:私はTaskletを初期化し、それをCompositeItemWriterを提供しようとしています。ここ

@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 { 

    } 
} 

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(); 

私が何かを見逃したり、間違った情報があった場合はお知らせください。

関連する問題