Spring Batchリスナーの例

Springのバッチでは、ステップ実行をインターセプトする6つの “リスナー”があります。私はクラス名は自明でなければならないと考えています。
-
StepExecutionListener
-
ItemReadListener
-
ItemProcessListener
-
ItemWriteListener
-
ChunkListener
-
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)
参考文献
ステップ実行]。
http://static.springsource.org/spring-batch/apidocs/org/springframework/batch/core/StepExecutionListener.html
[StepExecutionListener
JavaDoc]。
http://static.springsource.org/spring-batch/apidocs/org/springframework/batch/core/ItemReadListener.html
[ItemReadListener
JavaDoc]。
http://static.springsource.org/spring-batch/apidocs/org/springframework/batch/core/ItemProcessListener.html
[ItemProcessListener
JavaDoc]。
http://static.springsource.org/spring-batch/apidocs/org/springframework/batch/core/ItemWriteListener.html
[ItemWriteListener
JavaDoc]。
http://static.springsource.org/spring-batch/apidocs/org/springframework/batch/core/ChunkListener.html
[ChunkListener
JavaDoc]。
http://static.springsource.org/spring-batch/apidocs/org/springframework/batch/core/SkipListener.html
[SkipListener
JavaDoc]