在开始作业流开发之前需要先了解SpringBatch中的BatchStatus和ExitStatus这两个状态的含义。
BatchStatus和ExitStatus含义
1.BatchStatus:批处理状态
批处理状态是由批处理框架使用,用来记录Job、Step的执行情况。SpringBatch的重启即是利用了BatchStauts来实现。对应BATCH_JOB_INSTANCE和BATCH_STEP_EXECUTION表中的STATUS字段值。
JobExecution.getStatus()获取作业Job批处理状态;
StepExecution.getStatus()获取作业Step的批处理状态;
批处理状态属性:
状态 | 说明 |
---|---|
COMPLETED | 完成,所有Step都处理该状态,则JOB会处理该状态 |
STARTING | 表示作业正在启动,还没有启动完毕 |
STARTED | 表示作业启动完成 |
STOPING | 表示作业正在停止中 |
STOPED | 表示作业停止完成 |
FAILED | 表示作业执行失败 |
ABANDONED | 表示当前下次重启JOB时需要废弃的Step,即不会被再次执行 |
UNKOWN | 表示未知错误,该状态下重启Job会抛错 |
2.ExitStatus:退出状态
退出状态表示Step执行后或者Job执行后的状态,该值要以被修改,通常用于条件Flow中。
可以通过拦截器StepExecutionListener的afterStep方法来修改退出状态;
对应BATCH_JOB_INSTANCE和BATCH_STEP_EXECUTION表中的EXIT_CODE字段值;
顺序Flow
顺序Flow的配置非常简单,通过next指向下一个步骤
示例:三个步骤,执行顺序:step1.hello->step2.clean->step3.copyData
条件Flow
顾名思义,根据条件判断来决定流程走向。通过listener的afterStep方法来设置ExitStatus状态,XML中根据ExitStatus的值来决定流程走向。
示例:step1.hello运行结束后:
当ExistCode=T_FAILD,则执行step2.clean步骤;
当ExistCode为其它值时,则执行other步骤;
XML配置:
监听开发
监听非常重要,根据Step运行的结果来设置ExitStatus,next即是根据ExitStatus来判断流程走向
注:通过stepExecution可以获取Job的运行参数和Step的运行参数。
Launch启动器
运行结果
当flowDeciderType参数值=true时
当flowDeciderType参数值=false时
更多SpringBatch开发文档,移步到我的头条号。
如果本文对您有用,请顺手给个赞!