一、SpringBatch是一个批处理的框架,作为一个Spring组件,提供了通过使用Spring的依赖注入来处理批处理的条件。
什么是批处理呢?
在现代企业应用当中,面对复杂的业务以及海量的数据,除了通过庞杂的人机交互界面进行各种处理外,还有一类工作,不需要人工干预,只需要定期读入大批量数据,然后完成相应业务处理并进行归档。这类工作即为“批处理”。比如近期金融项目中的撮合功能,不需要人工干预,自动对借款人和出借人进行匹配撮合,完成借贷功能。
从上面的描述可以看出,批处理应用有如下几个特点:
- 数据量大,少则百万,多则上亿的数量级。
- 不需要人工干预,由系统根据配置自动完成。
- 与时间相关,如每天执行一次或每月执行一次。
同时,批处理应用又明显分为三个环节:
- 读数据,数据可能来自文件、数据库或消息队列等
- 数据处理,如电信支撑系统的计费处理
- 写数据,将输出结果写入文件、数据库或消息队列等
因此,从系统架构上,应重点考虑批处理应用的事务粒度、日志监控、执行、资源管理(尤其存在并发的情况下)。从系统设计上,应重点考虑数据读写与业务处理的解耦,提高复用性以及可测试性。
二、SpringBatch的业务场景有:
- 周期性的提交批处理
- 把一个任务并行处理
- 消息驱动应用分级处理
- 大规模并行批处理
- 手工或调度使用任务失败之后重新启动
- 有依赖步骤的顺序执行(使用工作流驱动扩展)
- 处理时跳过部分记录
- 成批事务:为小批量的或有的存储过程/脚本的场景使用
三、SpringBatch的架构图
SpringBatch使用三层架构,三层分别为应用、核心和基础服务。
细化的体系结构
应用层:包含所有的批处理作业,通过Spring框架管理程序员自定义的代码。
核心层:包含了Batch启动和控制所需要的核心类,如:JobLauncher、Job和step等。
基础服务层:应用层和核心层建立在基础服务层即基础架构层智商,基础架构层提供共通的读(ItemReader)、写(ItemWriter)和服务(如RetryTemplate:重试模块,可以被应用层和核心层使用)。
另外我们还需要知道,Spring Batch 是一款批处理应用框架,不是调度框架。它只关注批处理任务相关的问题,如事务、并发、监控、执行等,并不提供相应的调度功能。因此,如果我们希望批处理任务定期执行,可结合 Quartz 等成熟的调度框架实现。