Spring Batch是批处理框架

官方流程图

image.png

概念说明

官方文档

image.png

术语表

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

我的实践

主要参考

image.png

  • 一个step有数据的处理读取写入三个最重要的实现
  • 在config中组装了 step 和 job
  • 其中还有个监听器用来监听job成功后需要额外处理的动作
  • 单元测试

    1. @Autowired
    2. private JobLauncherService jobLauncherService;
    3. /**
    4. * 注意名字
    5. * 就是靠这个区分JOB的 classXls2DbJob classesDb2DbJob
    6. */
    7. @Autowired
    8. private Job classXls2DbJob;
    9. @Autowired
    10. private Job classesDb2DbJob;
    11. @Test
    12. public void testClassesDb2DbJob() throws JobParametersInvalidException, JobExecutionAlreadyRunningException, JobInstanceAlreadyCompleteException, JobRestartException {
    13. JobParameters jobParameters = JobUtil.makeJobParameters();
    14. Map<String, Object> stringObjectMap = jobLauncherService.startJob(classesDb2DbJob, jobParameters);
    15. Assert.assertEquals(ExitStatus.COMPLETED, stringObjectMap.get(SyncConstants.STR_RETURN_EXITSTATUS));
    16. }