Provide Best Programming Tutorials

Spring Batch Listener Example

Overview

This tutorial will demostarte how to use Spring Batch listeners.

Technologies Usded

  • spring-boot-starter-batch
  • Maven 3
  • JDK 1.8
  • IDEA

Project Structure

1.Listener Example

CustomStepListener.java

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

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

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

}

spring-batch-job.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:batch="http://www.springframework.org/schema/batch" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.springframework.org/schema/batch 
  http://www.springframework.org/schema/batch/spring-batch-2.2.xsd
  http://www.springframework.org/schema/beans 
  http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
  ">

 <import resource="../config/context.xml" />

 <bean id="domain" class="com.andrew.programming.Domain" />

 <bean id="fileDeletingTasklet" class="com.andrew.programming.tasklet.FileDeletingTasklet" >
  <property name="directory" value="file:csv/inputs/" />
 </bean>
 
 <bean id="customStepListener" class="com.andrew.programming.listeners.CustomStepListener" />
 <bean id="customItemReaderListener" class="com.andrew.programming.listeners.CustomItemReaderListener" />
 <bean id="customItemWriterListener" class="com.andrew.programming.listeners.CustomItemWriterListener" />
 
 <job id="readMultiFileJob" 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>
  <!-- 
  <step id="deleteDir">
      <tasklet ref="fileDeletingTasklet" />
  </step>
   -->
 </job>

 <bean id="multiResourceReader"
  class=" org.springframework.batch.item.file.MultiResourceItemReader">
  <property name="resources" value="file:csv/inputs/domain-*.csv" />
  <property name="delegate" ref="flatFileItemReader" />
 </bean>

 <bean id="flatFileItemReader" class="org.springframework.batch.item.file.FlatFileItemReader">

  <property name="lineMapper">
   <bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">

    <property name="lineTokenizer">
     <bean
      class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">
      <property name="names" value="id, domain" />
     </bean>
    </property>
    <property name="fieldSetMapper">
     <bean
      class="org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper">
      <property name="prototypeBeanName" value="domain" />
     </bean>
    </property>
   </bean>
  </property>

 </bean>

 <bean id="flatFileItemWriter" class="org.springframework.batch.item.file.FlatFileItemWriter">

  <property name="resource" value="file:csv/outputs/domain.all.csv" />
  <property name="appendAllowed" value="true" />
  <property name="lineAggregator">
   <bean
    class="org.springframework.batch.item.file.transform.DelimitedLineAggregator">
    <property name="delimiter" value="," />
    <property name="fieldExtractor">
     <bean
      class="org.springframework.batch.item.file.transform.BeanWrapperFieldExtractor">
      <property name="names" value="id, domain" />
     </bean>
    </property>
   </bean>
  </property>

 </bean>

</beans>

Run it

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

Source code

Github

springbatchtutorial_listenerExample-master

 

Leave a Reply

Close Menu