批处理中有些任务有前后的依赖关系,有些可以并行处理的任务,这些都可以通过Step Flow的来配置。
1. 顺序Flow
这是一种最常见的流程,及所有的step都是顺序执行,流程如下:
对于这种流程配置方法如下:
<job id="Job1" > <step id="step1" next="step2"> <tasklet ref="XXXX"> </step> <step id="step2" next="step3"> <tasklet ref="XXXX"> </step> <step id="step3" > <tasklet ref="XXXX"> </step> </job>
tasklet的配置跟普通的job配置一致,主要是增加了一个参数 next 指定下一步的 step。
2. 条件FLow
这种在流程图中很常见,Step 走完之后根据条件决定要走哪一个step。流程图如下:
对应的代码及解释如下:
<job id="Job2"> <step id="step1"> <tasklet ref="XXX" /> <next on="A" to="step2" /> <next on="B" to="step3" /> </step> <step id="step2"> <tasklet ref="XXXX"> </step> <step id="step3"> <tasklet ref="XXXX"> </step> </job>
- on: 定义作业的ExitStatus(退出状态)和 on属性匹配的时候,则执行to指定的作业步骤。on属性可以是任意的字符串,同时支持通配符”“,”?“
- "" 代表匹配任意的退出状态
- ”?“ 代表匹配一个字符,如u?load,则可以匹配upload
- to: 满足条件后需要执行的step
关于退出状态:
3. 并行Step
批处理里面的step有些有顺序要求,但是有些是可以并行处理的,如何处理这些并行处理的Step呢,Spring batch 提供的split标签。
Split 元素属性说明
Split 子元素属性说明
并行处理任务任务流程图
?
对应的配置:
<job id="id3" > <split id="splitId1" task-executor="XXXX" next="step4"> <flow> <step id="step1" next="step2"> <tasklet ref="XXXX"/> </step> <step id="step2" > <tasklet ref="xxx" /> </step> </flow> <flow> <step id="step3"> <tasklet ref="XXX" /> </step> </flow> </split> <step id="step4" > <tasklet ref="XXXX" /> </step> </job>