spring批处理:条件流
spring batch : Conditional Flow
我需要根据作业第1步中的某些条件来决定下一步调用哪个步骤。
请注意:在第 1 步中,我使用的是纯 tasklet 方法。示例:
<step id="step1">
<tasklet ref="example">
</step>
请帮忙,我如何将一些代码放入示例 tasklet 或进行一些配置来决定调用下一步?
我已经调查过 https://docs.spring.io/spring-batch/reference/html/configureStep.html
您可以像这样在上下文文件中指定流量控制:
<step id="step1">
<tasklet ref="example">
<next on="COMPLETED" to="step2" />
<end on="NO-OP" />
<fail on="*" />
<!--
You generally want to Fail on * to prevent
accidentally doing the wrong thing
-->
</step>
然后在您的 Tasklet
中,通过实施 StepExecutionListener
设置 ExitStatus
public class SampleTasklet implements Tasklet, StepExecutionListener {
@Override
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
// do something
return RepeatStatus.FINISHED;
}
@Override
public void beforeStep(StepExecution stepExecution) {
// no-op
}
@Override
public ExitStatus afterStep(StepExecution stepExecution) {
//some logic here
boolean condition1 = false;
boolean condition2 = true;
if (condition1) {
return new ExitStatus("COMPLETED");
} else if (condition2) {
return new ExitStatus("FAILED");
}
return new ExitStatus("NO-OP");
}
}
我需要根据作业第1步中的某些条件来决定下一步调用哪个步骤。
请注意:在第 1 步中,我使用的是纯 tasklet 方法。示例:
<step id="step1">
<tasklet ref="example">
</step>
请帮忙,我如何将一些代码放入示例 tasklet 或进行一些配置来决定调用下一步?
我已经调查过 https://docs.spring.io/spring-batch/reference/html/configureStep.html
您可以像这样在上下文文件中指定流量控制:
<step id="step1">
<tasklet ref="example">
<next on="COMPLETED" to="step2" />
<end on="NO-OP" />
<fail on="*" />
<!--
You generally want to Fail on * to prevent
accidentally doing the wrong thing
-->
</step>
然后在您的 Tasklet
中,通过实施 StepExecutionListener
public class SampleTasklet implements Tasklet, StepExecutionListener {
@Override
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
// do something
return RepeatStatus.FINISHED;
}
@Override
public void beforeStep(StepExecution stepExecution) {
// no-op
}
@Override
public ExitStatus afterStep(StepExecution stepExecution) {
//some logic here
boolean condition1 = false;
boolean condition2 = true;
if (condition1) {
return new ExitStatus("COMPLETED");
} else if (condition2) {
return new ExitStatus("FAILED");
}
return new ExitStatus("NO-OP");
}
}