2016-12-03 3 views

答えて

0

このカスタムアクションの最善の方法は、ステップリスナーを追加すると思います。あなたはStepExecutionListenerを実装する必要があり、この

@Bean 
    public Step stepA(ItemReader<String> readerA, ItemWriter<String> writerA) { 
      return stepBuilderFactory.get("stepA").<String, String> chunk(1) 
         .reader(readerA).writer(writerA).listener(stepListener()).build(); 
    } 

よう 何か。あなたが望むようレコードを削除することができ、このステップの範囲で

public class CustomStepListener implements StepExecutionListener { 

@Override 
public void beforeStep(StepExecution stepExecution) { 
    System.out.println("StepExecutionListener - beforeStep"); 
} 

@Override 
public ExitStatus afterStep(StepExecution stepExecution) { 
    System.out.println("StepExecutionListener - afterStep. Here we will delete all records"); 
    return null; 
} 

}

。 SqlQuery、Repositoryなど

+0

リスナーが別々のトランザクションで実行されているので、この方法をお勧めします。 (この記事を見てください:https://blog.codecentric.de/en/2012/03/transactions-in-spring-batch-part-2-restart-cursor-based-reading-and-listeners/)。 –

0

CompositeItemWriterを使用することをお勧めします。最初のライターとしてMyBatisBatchItemWriterを追加し、テーブルAのエントリを削除する2番目のライターを追加します。

このように、すべて同じトランザクションで実行されます。したがって、データの不一致のリスクはありません。

関連する問題