1.什么是批处理
在现代企业应用中,面对复杂的业务以及海量的数据,除了通过庞杂的人机交互界面进行各种批处理外,还有一类工作,不需要人工干预,只需要定期读入大批量数据,然后完成相应业务并进行归档。这类工作称为批处理,现实中例如银行的批量订单处理,政府不同业务数据库实现的同步,上下级平台实现的数据同步等。
从上面的描述可以看出,批处理应用有如下几个特点:
· 数据量大,少则百万,多则上亿的数量级。
·不需要人工干预,由系统根据配置自动完成。
·与时间相关,如每天执行一次或每月执行一次
同时,批处理应用又明显分为三个环节:
· 读数据,数据可能来自文件、数据库或消息队列等。
· 数据处理,如电信支撑系统的计费处理。
· 写数据,将输出结果写入文件、数据库或消息队列等。
2.spring batch介绍
Spring Batch 作为 Spring 的子项目,是一款基于 Spring 的企业批处理框架。通过它可以构建出健壮的企业批处理应用。Spring Batch 不仅提供了统一的读写接口、丰富的任务处理方式、灵活的事务管理及并发处理,同时还支持日志、监控、任务重启与跳过等特性,大大简化了批处理应用开发,将开发人员从复杂的任务配置管理过程中解放出来,使他们可以更多地去关注核心的业务处理过程。
另外我们还需要知道,Spring Batch 是一款批处理应用框架,不是调度框架。它只关注批处理任务相关的问题,如事务、并发、监控、执行等,并不提供相应的调度功能。因此,如果我们希望批处理任务定期执行,可结合 Quartz 等成熟的调度框架实现
比较重要的几个domain
JobRepository:作业仓库,保存Job、Step执行过程中的状态及结果,指定数据源和事务管理
JobLauncher;作业执行器,是执行Job的入口
Job:一个批处理任务,由一个或多个Step组成
Step :一个任务的具体的执行逻辑单位
Item :一条数据记录
ItemReader:从数据源读数据
ItemProcessor:对数据进行处理,如数据清洗、转换、过滤、校验等
ItemWriter:写入数据到指定目标
Chunk:给定数量的Item集合,如读取到chunk数量后,才进行写操作
Tasklet: Step中具体执行逻辑,可重复执行
重要的注解
@EnableBatchProcessing :自动补全一些相关属性
例如
@Autowired
public JobBuilderFactory jobBuilderFactory;
@Autowired
public StepBuilderFactory stepBuilderFactory;
@ JobScope:在任务实例化的时候创建Bean,开启延迟Bean实例功能
@StepScope:在step被使用时创建Bean,开启延迟加载功能