Spring Batch listeners example
By:Roy.LiuLast updated:2019-08-18

In Spring batch, there are six “listeners” to intercept the step execution, I believe the class name should be self-explanatory.
StepExecutionListener
ItemReadListener
ItemProcessListener
ItemWriteListener
ChunkListener
SkipListener
1. Listener Example
Three listener examples, do nothing but print out a message.
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. Batch Jobs
A batch job, attached above three listeners.
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>
Assume 3 records from a csv file are loaded and write it somewhere, here’s the console output :
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
References
From:一号门

COMMENTS