当前位置: 首页 > 工具软件 > AfterStep > 使用案例 >

SpringBatch 监听器之Job监听器(JobExecutionListener)和Step监听器(StepExecutionListener)(五)

桓瀚
2023-12-01

前言:例我们在执行job时候,可能需要在job执行之前预先对一些数据做处理,或者在job执行之后需要做一些处理。这时候我们就可以使用到监听器来帮做我们处理,SpringBatch已经帮我们预先留好接口了。

代码已上传GitHub上面地址:https://github.com/FadeHub/spring-boot-learn/tree/master/spring-boot-springbatch

在spring batch中主要以以下七种监听器为主:

  • Step监听器 :监听step的执行开始和结束;
  • Job监听器 :监听job的执行开始和结束;
  • SkipListener监听器 :在读、处理、写的过程中,监听跳过的异常;
  • ChunkListener监听器 :监听的chunk的执行开始和结束,或者监听chunk出错
  • ItemReadListener监听器:监听 读之前、读之后、读的时候发生错误
  • ItemProcessListener监听器:监听 处理之前、处理之后、处理的时候发生错误
  • ItemWriteListener监听器:监听 写之前、写之后、写的时候发生错误

SpringBatch其它文章直通车:

一、Job监听器-JobExecutionListener

Job监听器有两种实现方式:
1、使用注解@BeforeJob、@AfterJob
2、实现接口JobExecutionListener
我们以第二种实现方式为例 实现JobExecutionListener

CatJobListener

package com.sl.listener;

import org.springframework.batch.core.JobExecution;
import org.springframework.batch.core.JobExecutionListener;
import org.springframework.stereotype.Component;

/**
 * job监听器
 * @author shuliangzhao
 * @Title: CatJobListener
 * @ProjectName spring-boot-learn
 * @Description: TODO
 * @date 2019/9/11 19:24
 */
@Component
public class CatJobListener implements JobExecutionListener {
    @Override
    public void beforeJob(JobExecution jobExecution) {
        System.out.println("job执行执行做处理");
    }

    @Override
    public void afterJob(JobExecution jobExecution) {
        System.out.println("job执行执行做处理");
    }
}

在创建job时候添加监听器

@Bean
    public Job catJob() {
         return jobBuilderFactory.get("catJob")
                 .start(catStep())
                 .listener(catJobListener)
                 .build();
    }

二、Step监听器-StepExecutionListener

step监听器有两种实现方式:
1、使用注解@BeforeStep、@AfterStep
2、实现接口StepExecutionListener
我们以第二种实现方式为例 实现StepExecutionListener

CatStepListener

package com.sl.listener;

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

/**
 * @author shuliangzhao
 * @Title: CatStepListener
 * @ProjectName spring-boot-learn
 * @Description: TODO
 * @date 2019/9/11 19:48
 */
@Component
public class CatStepListener implements StepExecutionListener {
    @Override
    public void beforeStep(StepExecution stepExecution) {
        System.out.println("step执行之前");
    }

    @Override
    public ExitStatus afterStep(StepExecution stepExecution) {
        System.out.println("step执行之后");
        return null;
    }
}

在创建step添加监听器

@Bean
    public Step catStep() {
        return stepBuilderFactory.get("catStep")
                .listener(catStepListener)
                .<Cat, CafeCat>chunk(10)
                .reader(catCommonMybatisItemReader())
                .processor(cafeCatProcessor)
                .writer(cafeCatCommonFileItemWriter())
                .build();
    }

以上是Job监听器和Step监听器的简单用法。我们可以根据自己的业务场景灵活运用,会对你的代码有很大帮助。

 类似资料: