spring-batch-listeners、width = 545、height = 358

Springのバッチでは、ステップ実行をインターセプトする6つの “リスナー”があります。私はクラス名は自明でなければならないと考えています。

  1. StepExecutionListener

  2. ItemReadListener

  3. ItemProcessListener

  4. ItemWriteListener

  5. ChunkListener

  6. SkipListener

1.リスナーの例

3つのリスナーの例は、何もしないでメッセージを出力します。

CustomStepListener.java

package com.mkyong.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.mkyong.listeners;

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

public class CustomItemReaderListener implements ItemReadListener<Domain> {

    @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.mkyong.listeners;

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

public class CustomItemWriterListener implements ItemWriteListener<Domain> {

    @Override
    public void beforeWrite(List<? extends Domain> items) {
        System.out.println("ItemWriteListener - beforeWrite");
    }

    @Override
    public void afterWrite(List<? extends Domain> items) {
        System.out.println("ItemWriteListener - afterWrite");
    }

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

}

2.バッチジョブ

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

spring-batch-job.xml

    <bean id="customStepListener"
          class="com.mkyong.listeners.CustomStepListener"/>
    <bean id="customItemReaderListener"
          class="com.mkyong.listeners.CustomItemReaderListener"/>
    <bean id="customItemWriterListener"
          class="com.mkyong.listeners.CustomItemWriterListener"/>

    <job id="readFileJob" xmlns="http://www.springframework.org/schema/batch">
    <step id="step1">
        <tasklet>
        <chunk reader="multiResourceReader" writer="flatFileItemWriter"
            commit-interval="1"/>
            <listeners>
            <listener ref="customStepListener"/>
            <listener ref="customItemReaderListener"/>
            <listener ref="customItemWriterListener"/>
            </listeners>
        </tasklet>
    </step>
    </job>

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)