标签搜索

深入理解spring batch

wangpig
2023-07-14 / 0 评论 / 88 阅读 / 正在检测是否收录...

深入理解spring batch

一个轻量级、全面的批处理框架,旨在开发对企业系统日常运营至关重要的强大批处理应用程序。

概念

img.png

JobLauncher

job启动器,用于启动job

Job

job接口,默认仅一个实现SimpleJob

Step

step接口,一个job中可以有多个Step。其实现较多,也是spring batch中主要扩展、定制的接口。
其实现的子类主要主:

  • FlowStep 将一组Step委托给Flow 进行执行。
  • TaskletStep 最简单的Step实现
  • JobStep 将Job包装成一个Step,用Job将不同的Step进行隔离,用于管理Job之间的依赖关系。
  • PartitionStep 使用PartitionHandler对执行进行分区和扩展负载。
  • ...

JobRepository

默认实现为SimpleJobRepository,其包含四个dao操作,其都是以接口的形式暴露出来:

  • JobInstanceDao jobInstanceDao; 任务执行实例资源操作
  • JobExecutionDao jobExecutionDao; 任务执行资源操作
  • StepExecutionDao stepExecutionDao; 步骤执行资源操作
  • ExecutionContextDao ecDao; 执行上下文资源操作

Spring Batch 通过JobRepository将JobExecution、StepExecution等运行时上下文、状态进行持久化。

JobExecution

任务执行,与一个任务实例绑定,当任务的步骤执行时,会动态将一个个StepExecution添加到其中。
所以每一个StepExecution都可以通过绑定的JobExecution去获取到所有的StepExecution。

StepExecution

步骤执行,与每个步骤绑定,同时与JobExecution建立多对一的关系。

执行逻辑

  1. JobLauncher#run 启动Job
  2. jobRepository#getLastJobExecution 获取JobExecution、StepExecution进行校验
  3. job.getJobParametersValidator.validate 校验入参
  4. jobRepository.createJobExecution 创建JobExecution
  5. job.execute 进入任务执行
  6. BatchMetrics.createObservation 开始任务执行的指标监测
  7. listener.beforeJob(execution) 具体任务执行前监听器处理
  8. doExecute(execution) 具体任务执行(由子类实现)

    1. 循环handleStep SimpleJob中循环调用保护方法(由SimpleStepHandler实现)
    2. 调用step的execute()方法
  9. listener.afterJob(execution) 具体任务执行后监听器处理

这是一个比较粗略的执行逻辑,从中可以看到有以下扩展点:

  1. JobParametersValidator 对任务入参可进行校验
  2. JobExecutionListener 可对job的执行前后进行监听处理
  3. StepExecutionListener 可对step执行的前后进行监听处理

表结构

JobInstanceDao -> JOB_INSTANCE表

JOB_INSTANCE_ID, JOB_NAME, JOB_KEY, VERSION

JobExecutionDao -> JOB_EXECUTION表

JOB_EXECUTION_ID, JOB_INSTANCE_ID, START_TIME, END_TIME, STATUS, EXIT_CODE, EXIT_MESSAGE, VERSION, CREATE_TIME, LAST_UPDATED

StepExecutionDao -> STEP_EXECUTION

STEP_EXECUTION_ID, VERSION, STEP_NAME, JOB_EXECUTION_ID, START_TIME, END_TIME, STATUS, COMMIT_COUNT, READ_COUNT, FILTER_COUNT, WRITE_COUNT, EXIT_CODE, EXIT_MESSAGE, READ_SKIP_COUNT, WRITE_SKIP_COUNT, PROCESS_SKIP_COUNT, ROLLBACK_COUNT, LAST_UPDATED, CREATE_TIME

ExecutionContextDao -> JOB_EXECUTION_CONTEXT、STEP_EXECUTION_CONTEXT

JOB_EXECUTION_CONTEXT:
SHORT_CONTEXT, SERIALIZED_CONTEXT, JOB_EXECUTION_ID
STEP_EXECUTION_CONTEXT:
SHORT_CONTEXT, SERIALIZED_CONTEXT, STEP_EXECUTION_ID

0

评论 (0)

取消

浙公网安备 33020502001051号

浙ICP备2023015387号-1