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

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建立多对一的关系。
执行逻辑
- JobLauncher#run 启动Job
- jobRepository#getLastJobExecution 获取JobExecution、StepExecution进行校验
- job.getJobParametersValidator.validate 校验入参
- jobRepository.createJobExecution 创建JobExecution
- job.execute 进入任务执行
- BatchMetrics.createObservation 开始任务执行的指标监测
- listener.beforeJob(execution) 具体任务执行前监听器处理
doExecute(execution) 具体任务执行(由子类实现)
- 循环handleStep SimpleJob中循环调用保护方法(由SimpleStepHandler实现)
- 调用step的execute()方法
- listener.afterJob(execution) 具体任务执行后监听器处理
这是一个比较粗略的执行逻辑,从中可以看到有以下扩展点:
- JobParametersValidator 对任务入参可进行校验
- JobExecutionListener 可对job的执行前后进行监听处理
- 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)