相关文章推荐
重感情的脸盆  ·  ValueError: Not a ...·  1 年前    · 
快乐的小熊猫  ·  Django ...·  1 年前    · 
深情的火龙果  ·  mysql线上排错 ...·  1 年前    · 

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

SpringBatch其它文章直通车:

一、Chunk监听器(ChunkListener)

ChunkListener监听器顾名思义,就是SpringBatch一个chunk之前或者之后需要做的事情。
例如:可以用来统计一个chunk,执行需要多少时间,可以辅助我们优化代码。

Chunk监听器有两种实现方式:
1、使用注解@BeforeChunk、@AfterChunk
2、实现接口ChunkListener
我们以第二种实现方式为例 实现ChunkListener
CatChunkListener

package com.sl.listener;
import org.springframework.batch.core.ChunkListener;
import org.springframework.batch.core.configuration.annotation.StepScope;
import org.springframework.batch.core.scope.context.ChunkContext;
import org.springframework.stereotype.Component;
 * @author shuliangzhao
 * @Title: CatChunkListener
 * @ProjectName spring-boot-learn
 * @Description: TODO
 * @date 2019/9/12 19:08
@Component
@StepScope
public class CatChunkListener implements ChunkListener {
    @Override
    public void beforeChunk(ChunkContext chunkContext) {
        System.out.println("chunk执行之前");
    @Override
    public void afterChunk(ChunkContext chunkContext) {
        System.out.println("chunk执行之后");
    @Override
    public void afterChunkError(ChunkContext chunkContext) {
        System.out.println("chunk执行报错之后");

在创建step时候添加监听器

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

二、Skip监听器(SkipListener)

SkipListener监听器就是SpringBatch在读,处理,写时候发生异常,程序不会断批,发生这些异常的数据会跳过去,继续执行job。
例如:当程序发生DuplicateKeyException异常时我们可以跳过这条数据,记录异常报表中。

Chunk监听器有两种实现方式:
1、使用注解@OnSkipInRead、@OnSkipInWrite、@OnSkipInProcess
2、实现接口SkipListener
我们以第二种实现方式为例 实现SkipListener
先打开监听器faultTolerant,另一个参数skipLimit是代表,发生多少次数之后,程序会停止。

CatSkipListener

package com.sl.listener;
import org.springframework.batch.core.SkipListener;
import org.springframework.stereotype.Component;
 * @author shuliangzhao
 * @Title: CatSkipListener
 * @ProjectName spring-boot-learn
 * @Description: TODO
 * @date 2019/9/12 19:18
@Component
public class CatSkipListener implements SkipListener {
    @Override
    public void onSkipInRead(Throwable throwable) {
        System.out.println("读的时候发生错误"); 
    @Override
    public void onSkipInWrite(Object o, Throwable throwable) {
        System.out.println("写的时候发生错误");
    @Override
    public void onSkipInProcess(Object o, Throwable throwable) {
        System.out.println("处理的时候发生错误");

在创建step时候添加监听器

  @Bean
    public Step catStep() {
        return stepBuilderFactory.get("catStep")
                .<Cat, CafeCat>chunk(10)
                .reader(catCommonMybatisItemReader())
                .processor(cafeCatProcessor)
                .writer(cafeCatCommonFileItemWriter())
                .faultTolerant()
                .skip(DuplicateKeyException.class)
                .skipLimit(Integer.MAX_VALUE)
                .build();

以上是我们之Chunk监听器(ChunkListener)和Skip监听器(SkipListener)简单介绍和用法

写在前面: 我是「境里婆娑」。我还是从前那个少年,没有一丝丝改变,时间只不过是考验,种在心中信念丝毫未减,眼前这个少年,还是最初那张脸,面前再多艰险不退却。 写博客的目的就是分享给大家一起学习交流,如果您对 Java感兴趣,可以关注我,我们一起学习。 前言:为什么要写这篇文章,由于长时间都是在使用连接数据库第三方框架Mybatis等,不使用JDBC操作,导致很多基础知识都朦朦胧胧似懂非懂,今天抽空把这部分内容认真复习了下,顺便写篇文章加深印象。本文以MySql为例。 语文中有个词叫上下文,比如:联系上下文解读一下作者所有表达意思。从这看上下文有环境,语境,氛围的意思。类比到编程,业内也喜欢使用Context表示上下文。比如Spring容器: SpringApplicationContext 。有上下文这个铺垫之后,我们来看下Spring Batch的上下文。 * Licensed under the Apache License, Version 2.0 1.skip层的skip()和skipLimit()方法 skipLimit() 用于指定跳过该异常的最大次数,如超过1000次则不跳过。 skip() 用于指定所要跳过的异常类型 参考如下: @Bean public Step step1() { //这个版本不带数据处理校验规则 Job监听器 :监听job的执行开始和结束; SkipListener监听器 :在读、处理、写的过程中,监听跳过的异常; ChunkListener监听器 :监听的chunk的执行开始和结束,或者监听chunk出错。 一、Step监听器 首先创建一个step监听器,实现StepExe... 进阶Spring Batch四种模式的理解 官方文档链接:https://docs.spring.io/spring-batch/trunk/reference/html/index.html 如有不正确的地方,欢迎下方留言指正。本文为自主原创,如有需要转载请与博主联系并说明出处,谢谢。 相信读者在看到这篇文章之前已经对spring batch已经有了初步了解,这里就不在赘述那些基本介绍(主... Chunk操作中提供了丰富的拦截器机制,拦截器可以实现额外的控制能力,例如日志记录、任务跟踪、状态报告、数据传递等能力, 在SpringBatch的处理过程中,尽可能地保持业务的简单性,任何额外的处理需要在拦截器中进行功能实现                                                                Chunk拦截器接口 在 Job 开始之前(beforeJob)和之后(afterJob)触发 StepExecutionListener 在 Step 开始之前(beforeStep)和之后(afterStep)触发 ChunkListenerChunk 开始之前(beforeC 前面的文章跟大家一起讨论了Spring Batch的概念,处理流程,以及SpringBatch处理文件、DB的一些简单实例。接下来的讨论,主要是关于Spring Batch的一些高级应用处理和实际开发中需要注意的一些问题。 今天主要和大家讨论SpringBatch关于skip容错机制的一些处理。 一、skip的介绍 在实际的项目开发中,我们常常...