根据Spring-Batch文档(http://docs.spring.io/spring-batch/2.2.x/reference/html/configureStep.html#controllingStepFlow),控制xml配置文件中的步骤非常简单:
e.g。我可以编写以下作业配置:
<job id="myJob">
<step id="step1">
<fail on="CUSTOM_EXIT_STATUS"/>
<next on="*" to="step2"/>
</step>
<step id="step2">
<end on="1ST_EXIT_STATUS"/>
<next on="2ND_EXIT_STATUS" to="step10"/>
<next on="*" to="step20"/>
</step>
<step id="step10" next="step11" />
<step id="step11" />
<step id="step20" next="step21" />
<step id="step21" next="step22" />
<step id="step22" />
</job>
是否有一种以java-config方式定义此类作业配置的简单方法? (使用JobBuilderFactory等等......)
答案 0 :(得分:3)
正如文档中提到的那样,我们只能根据步骤的退出状态来分支流。为了能够报告自定义退出状态(可能与从批处理状态自动映射的退出状态不同),我们必须为id year name order
parent1 2001 bas 1
parent1 2002 jack 2
parent2 1991 david 1
parent3 1993 daniel 1
parent3 1993 jasper 1
parent3 1994 melany 2
parent4 1997 john 3
parent4 1999 gerard 1
提供afterStep
方法。
假设我们有一个初始步骤StepExecutionListener
(step1
类Tasklet
的一个实例),我们想要执行以下操作:
Step1
失败(例如通过抛出运行时异常),那么整个作业应被视为step1
。 FAILED
以step1
的退出状态完成,那么我们想要分支到某个步骤COMPLETED-WITH-A
,该步骤可能会处理此特定情况。step2a
。现在,在step2
类中提供afterStep
方法(同时实施Step1
):
StepExecutionListener
最后,在private static class Step1 implements Tasklet, StepExecutionListener
{
@Override
public ExitStatus afterStep(StepExecution stepExecution)
{
logger.info("*after-step1* step-execution={}", stepExecution.toString());
// Report a different exit-status on a random manner (just a demo!).
// Some of these exit statuses (COMPLETED-WITH-A) are Step1-specific
// and are used to base a conditional flow on them.
ExitStatus exitStatus = stepExecution.getExitStatus();
if (!"FAILED".equals(exitStatus.getExitCode())) {
double r = Math.random();
if (r < 0.50)
exitStatus = null; // i.e. COMPLETED
else
exitStatus = new ExitStatus(
"COMPLETED-WITH-A",
"Completed with some special condition A");
}
logger.info("*after-step1* reporting exit-status of {}", exitStatus);
return exitStatus;
}
// .... other methods of Step1
}
实现的createJob
方法中构建作业流程:
JobFactory
答案 1 :(得分:1)
也许。如果您的意图是“以编程方式”编写类似于流程决策程序的东西(使用SB的框架接口,我的意思是)有内置的实现,并且足以满足大多数用例。
与XML配置相反,如果您熟悉它们,可以使用JavaConfig注释;我个人更喜欢XML定义,但这只是个人观点。