springbatch 批处理框架整理
(还在整理中。。。。。。。。有点乱,待更新)
Spring Batch 是什么? 官网中介绍 Spring Batch is a lightweight, comprehensive batch framework designed to enable the development of robust batch applications vital for the daily operations of enterprise systems.(一款轻量的、全面的批处理框架,用于开发强大的日常运营的企业级批处理应用程序。)相对于他的特点定义我们肯定更倾向于他的使用的业务场景以及他是如何运作的。下面的篇幅将介绍整个springbatch的使用业务场景和它的结构原理以及如何去使用它们(最后会通过一个demo来演示)。
springbatch结合springboot 的demo:https://github.com/kellypipe/springbatch-springboot-demo
1、使用场景
对于没有相关经验的初学者,下面是需要批处理的一些场景,并且如果使用Spring Batch 很可能会节省你很多宝贵的时间:
- 接收的文件缺少了一部分需要的信息,你需要读取并解析整个文件,调用某个服务来获得缺少的那部分信息,然后写入到某个输出文件,供其他批处理程序使用。
- 如果执行环境中发生了一个错误,则将失败信息写入数据库。 有专门的程序每隔15分钟来遍历一次失败信息,如果标记为可以重试,那就再执行一次。
- 在工作流中,你希望其他系统在收到事件消息时,来调用某个特定服务。 如果其他系统没有调用这个服务,那么一段时间后需要自动清理过期数据,以避免影响到正常的业务流程。
- 每天收到员工信息更新的文件,你需要为新员工建立相关档案和账号(artifacts)。
- 有些定制订单的服务。 你需要在每天晚上执行批处理程序来生成清单文件,并将它们发送到相应的供应商手上。
典型的批处理程序通常是从数据库、文件或队列中读取大量数据,然后通过某些方法处理数据,最后将处理好格式的数据写回库。对于批处理经验少的开发者来说,编写批处理程序来处理GB级别数据量无疑是种海啸般难以面对的任务,但我们可以用Spring Batch将其拆解为小块小块的(chunk)。 Spring Batch 是Spring框架的一个模块,专门设计来对各种类型的文件进行批量处理。
- 定期提交批处理任务
- 并发批处理:并行执行任务
- 分阶段,企业消息驱动处理
- 高并发批处理任务
- 失败后手动或定时重启
- 按顺序处理任务依赖(使用工作流驱动的批处理插件)
- 局部处理:跳过记录(例如在回滚时)
- 完整的批处理事务:因为可能有小数据量的批处理或存在存储过程/脚本
总的来说,springbatch 封装了一些细节操作(比如批处理数据的时候不需要我们自己去考虑如何去读取数据,如何去操作数据,如何去写入数据,这些框架都封装了),我们需要关注整个批处理任务的流程就可以了;
2、框架结构
上面图是已经使用了几十年的批处理参考体系结构的简化版本。它概述了组成批处理领域的组件.Spring Batch 在系统中提供了健壮的、可维护的常见的层、组件和技术服务的物理实现,这些系统用于创建简单到复杂的批处理应用程序,其基础结构和扩展可以满足非常复杂的处理需求。
上图能明显看到有4个主要角色:
- JobLauncher:是任务启动器,通过它来启动任务,可以看做是程序的入口。
- Job代表着一个具体的任务。
- Step代表着一个具体的步骤,一个Job可以包含多个Step.在实际业务场景中,可能一个任务很复杂,这个时候可以将任务 拆分成多个step,分别对这些step 进行管理(将一个复杂任务简单化)。(这些s