SpringBatch - SkipPolicy, 蚂蚁金服变马已今服

java 专栏收录该内容
72 篇文章 0 订阅

前言

最近蚂蚁金服变成了 ‘马已今服’ 了, 我的朋友圈小伙伴们的表现有捶胸顿足的, 还有转发网抑云的我不配, 没这命这样的歌, 积极的动态也就是上市从来不是最终的目标, 下面我们通过 springbatch 的跳过策略来讲讲这个问题

Spring Batch 可跳过性

因为我们处理数据的时候有不同的需求, 比如有 100 条数据, 处理到第 6 条的时候失败了, 整个 step 都终止了, 这个可能是大多数批处理任务不希望看到的, 大多数的批处理任务是希望当前处理失败的记录下来, 单据补偿, 大多数的数据先跑过去, 这时候就要配置跳过策略了

Spring Batch 可跳过性例子

假如福报厂的各个公司都要上一遍市, 我们定义一下这个读, 处理和写的过程

读:

@Data
@NoArgsConstructor
public class ListReader<T> implements ItemReader<T> {

    private List<T> sourceList;
    private int index = 0;

    public ListReader(List<T> sourceList) {
        this.sourceList = sourceList;
    }

    @Override
    public T read() throws Exception {
        return sourceList.size() > index ? sourceList.get(index++) : null;
    }
}

处理:

@Component
public class FubaoProcessor implements ItemProcessor<Company,String> {

    @Override
    public String process(Company company) throws Exception {
        if(Objects.equals(company.getName(),"蚂蚁金服")) {
            throw new RuntimeException("暂缓上市");
        }
        if(Objects.equals(company.getName(),"盒马")) {
            return null;
        }
        return company.getName() + "上市成功! 恭喜员工财务自由";
    }
}

写:

@Component
public class FubaoWriter implements ItemWriter<String> {

    @Override
    public void write(List<? extends String> list) throws Exception {
        list.stream().forEach(item -> {
            if (item.contains("大文娱")) {
                throw new NonSkippableWriteException("上市异常", new RuntimeException("异常异常"));
            }
            System.out.println(item);
        });
    }
}

拼装:

final String JOB_NAME = "demo4Ali";
List<Company> commodityList = Arrays.asList(new Company("蚂蚁金服"),
    new Company("菜鸟网络"),
    new Company("阿里云"),
    new Company("盒马"),
    new Company("大文娱"),
    new Company("飞猪"),
    new Company("阿里健康")
    );
final ListReader<Company> reader = new ListReader<>(commodityList);
final Job girlJob = jobBuilderFactory.get(JOB_NAME)
    .flow(stepBuilderFactory.get(JOB_NAME)
        .<Company, String>chunk(2).reader(reader)
        .processor(fubaoProcessor).writer(fubaoWriter).faultTolerant()
        .skipPolicy(new AlwaysSkipItemSkipPolicy()).listener(new SkipListener<Company, String>() {
            @Override
            public void onSkipInRead(Throwable throwable) {
                System.out.println("onSkipInRead: " + throwable);
            }

            @Override
            public void onSkipInProcess(Company company, Throwable throwable) {
                System.out.println("onSkipInProcess: " + company.getName() + "暂缓上市");
            }

            @Override
            public void onSkipInWrite(String s, Throwable throwable) {
                System.out.println("onSkipInWrite: <del>" + s + "</del>上市失败");
            }
        }).build())
    .end().build();
jobLauncher.run(girlJob, new JobParametersBuilder()
    .addDate("start_time", new Date()).toJobParameters());

表现:

菜鸟网络上市成功! 恭喜员工财务自由
onSkipInProcess: 蚂蚁金服暂缓上市
阿里云上市成功! 恭喜员工财务自由
飞猪上市成功! 恭喜员工财务自由
onSkipInWrite: <del>大文娱上市成功! 恭喜员工财务自由</del>上市失败
阿里健康上市成功! 恭喜员工财务自由

Spring课后作业

  1. 尝试自定义跳过策略替换掉 AlwaysSkipItemSkipPolicy

公众号: codog代码狗
在这里插入图片描述

  • 1
    点赞
  • 3
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

<div style="color:#444444;"> 适用人群 <p style="color:#666666;"> 所有的IT从业者,尤其适合快速掌握新技术,快速增长工作经验人群,对教育公平,教育公益,教育爱心公益人士 </p> </div> <p> <strong>提供完整的课程源代码,前端 后端点击视频观看,在右侧的【课件】中下载,所有代码都是线下班级运行很多次额,请放心购买。</strong> </p> 课程概述 <p> 该互联网实战项目是基于 Spring Boot 2+ SpringSecurity5+Element UI+Vue Admin Template+蚂蚁可视化AntV 等技术栈开发的项目,采用分布式,多模块,前后端分离开发。包括图形展示、权限管理、用户管理等功能。<br /> 【后端技术】<br /> 技术 说明<br /> Spring Boot2 MVC框架 开发的一站式解决方案<br /> Spring Security5  认证和授权框架<br /> MyBatisPlus3.3.1  基于 MyBatis 框架的快速研发框架<br /> MyBatisCode工具 生成 MyBatis 相关代码<br /> Jackson 提供了处理 JSON 数据的工具<br /> Lombok 简化对象封装工具 <br /> Druid   数据库连接池  </p> <p> <br /> 【前端技术】<br /> Vue        互联网最火的前端框架<br /> Vue Router 路由框架<br /> Vuex 全局状态管理框架<br /> Axios 前端 HTTP 框架<br /> Element UI 前端 UI 框架<br /> Vue Element Admin 前端模板 </p> <p> Antv  蚂蚁金服可视化技术,阿里巴巴可视化技术,天猫,淘宝,支付宝,花呗均使用AntV </p> <p> <br /> </p> 【开发工具】<br /> IntelliJ IDEA 开发 IDE<br /> SQLyog 数据库连接客户端<br /> Postman HTTP 请求工具 <p> <br /> 【开发环境】<br /> 工具 版本<br /> JDK 1.8<br /> MySQL 5.7 </p> <p> <br /> </p> <p> <br /> </p> <p> <img src="https://img-bss.csdn.net/202004100908064292.png" alt="" /> </p> <p> <img src="https://img-bss.csdn.net/202004100901042498.png" alt="" /> </p> <p> <br /> </p> <p> <br /> </p> <p> <br /> </p> <p> <br /> </p> <p> <br /> </p> <p> <img src="https://img-bss.csdn.net/202004100902149146.png" alt="" /> </p> <p> <img src="https://img-bss.csdn.net/202004100902305627.png" alt="" /> </p> <p> <br /> </p> <p> <br /> </p> <p> <img src="https://img-bss.csdn.net/202004100903304413.png" alt="" /> </p> <p> <br /> </p> <p> <img src="https://img-bss.csdn.net/202004100907393190.png" alt="" /><img src="https://img-bss.csdn.net/202004100907503620.png" alt="" /> </p> <p> <br /> </p>
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值