Spring Batch是批处理框架
官方流程图
概念说明
术语表
https://docs.spring.io/spring-batch/docs/4.3.x/reference/html/glossary.html#glossary
我的理解
- batch 由 一个数据读取组件,一个数据处理组件,一个数据写入组件,组成的
- 三大组件会被封装到一个step中
- 我的理解step就是一个步骤
- 每个step对应一个ItemReader、ItemProcessor及ItemWriter
- 可以多个ItemWriter
- 然后在由 job 进行运行处理
- 我的理解就是个running
- 一个Job有多个Step
- Job是通过JobLauncher来启动
- JobRepository
- Job及Job的运行结果和状态、Step的运行结果和状态,都会保存在这里
- 特别注意
- batch 只是一个流程的处理他不能进行任务调度
- 必须结合调度框架才能完成定时等功能的处理(推荐 xxl_job
我的实践
- 一个step有数据的处理读取写入三个最重要的实现
- 在config中组装了 step 和 job
- 其中还有个监听器用来监听job成功后需要额外处理的动作
单元测试
@Autowired
private JobLauncherService jobLauncherService;
/**
* 注意名字
* 就是靠这个区分JOB的 classXls2DbJob classesDb2DbJob
*/
@Autowired
private Job classXls2DbJob;
@Autowired
private Job classesDb2DbJob;
@Test
public void testClassesDb2DbJob() throws JobParametersInvalidException, JobExecutionAlreadyRunningException, JobInstanceAlreadyCompleteException, JobRestartException {
JobParameters jobParameters = JobUtil.makeJobParameters();
Map<String, Object> stringObjectMap = jobLauncherService.startJob(classesDb2DbJob, jobParameters);
Assert.assertEquals(ExitStatus.COMPLETED, stringObjectMap.get(SyncConstants.STR_RETURN_EXITSTATUS));
}