Spring Batchリスナーの例

Spring Batchリスナーの例

spring-batch-listeners

Springバッチには、ステップ実行をインターセプトする6つの「リスナー」があります。クラス名は自明であるべきだと思います。

  1. StepExecutionListener

  2. ItemReadListener

  3. ItemProcessListener

  4. ItemWriteListener

  5. ChunkListener

  6. SkipListener

1. リスナーの例

リスナーの3つの例では、メッセージを出力するだけです。

CustomStepListener.java

package com.example.listeners;

import org.springframework.batch.core.ExitStatus;
import org.springframework.batch.core.StepExecution;
import org.springframework.batch.core.StepExecutionListener;

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");
        return null;
    }

}

CustomItemReaderListener.java

package com.example.listeners;

import org.springframework.batch.core.ItemReadListener;
import com.example.Domain;

public class CustomItemReaderListener implements ItemReadListener {

    @Override
    public void beforeRead() {
        System.out.println("ItemReadListener - beforeRead");
    }

    @Override
    public void afterRead(Domain item) {
        System.out.println("ItemReadListener - afterRead");
    }

    @Override
    public void onReadError(Exception ex) {
        System.out.println("ItemReadListener - onReadError");
    }

}

CustomItemWriterListener.java

package com.example.listeners;

import java.util.List;
import org.springframework.batch.core.ItemWriteListener;
import com.example.Domain;

public class CustomItemWriterListener implements ItemWriteListener {

    @Override
    public void beforeWrite(List items) {
        System.out.println("ItemWriteListener - beforeWrite");
    }

    @Override
    public void afterWrite(List items) {
        System.out.println("ItemWriteListener - afterWrite");
    }

    @Override
    public void onWriteError(Exception exception, List items) {
        System.out.println("ItemWriteListener - onWriteError");
    }

}

2. バッチジョブ

3つのリスナーの上に付加されたバッチジョブ。

spring-batch-job.xml

    
    
    

    
    
        
        
            
            
            
            
            
        
    
    

csvファイルから3つのレコードが読み込まれ、どこかに書き込むと仮定します。コンソール出力は次のとおりです。

StepExecutionListener - beforeStep

ItemReadListener - beforeRead
ItemReadListener - afterRead
ItemWriteListener - beforeWrite
ItemWriteListener - afterWrite

ItemReadListener - beforeRead
ItemReadListener - afterRead
ItemWriteListener - beforeWrite
ItemWriteListener - afterWrite

ItemReadListener - beforeRead
ItemReadListener - afterRead
ItemWriteListener - beforeWrite
ItemWriteListener - afterWrite

StepExecutionListener - afterStep

ソースコードをダウンロード

ダウンロード–SpringBatch-Listener-Example.zip(14 KB)