[英]Creating a iterating flow steps in Spring Batch
我正在做一个流程步骤,他需要在不同的时刻重复同样的步骤。 在我们使用RepeatStatus.FINISHED之前,它不会重复相同的步骤,但在执行其他步骤之后,请转到上一步。 我们已经做了一个简化的模型来尝试它,但它也没有用。
Job.xml:
<job id="job1" xmlns="http://www.springframework.org/schema/batch">
<step id="job1Step1" next="decision1">
<tasklet ref="tasklet1" />
</step>
<decision id="decision1" decider="decider1">
<next on="1" to="job1Step1"/>
<next on="2" to="job1Step2"/>
<next on="3" to="job1Step3"/>
</decision>
<step id="job1Step2" next="decision2">
<tasklet ref="tasklet2" />
</step>
<decision id="decision2" decider="decider2">
<next on="1" to="job1Step1"/>
<next on="2" to="job1Step2"/>
<next on="3" to="job1Step3"/>
</decision>
<step id="job1Step3" next="job1Step1">
<tasklet ref="tasklet3" />
</step>
</job>
豆子:
<bean id="decider1" class="Decider1"/>
<bean id="decider2" class="Decider2"/>
<bean id="tasklet1" class="Tasklet1"/>
<bean id="tasklet2" class="Tasklet2"/>
<bean id="tasklet3" class="Tasklet3"/>
然后,有java类的模型:
Tasklet类模型:
public class TaskletN implements Tasklet {
protected static Log log = LogFactory.getLog(TaskletN.class);
@Override
public RepeatStatus execute(StepContribution stepCont, ChunkContext chunkContext) throws Exception {
log.info("Passo per TASKLET_N");
return null;
}
}
Decider类模型:
public class DeciderM implements JobExecutionDecider {
protected static Log log = LogFactory.getLog(DeciderM.class);
public FlowExecutionStatus decide(JobExecution jobExecution, StepExecution stepExecution) {
String prova = "M+1";
log.info("Estic a DECIDER_M i vaig al STEP: " + prova);
return new FlowExecutionStatus(prova);
}
}
而且,这就是问题所在。 第一次它没关系,但第二次和其他时间它直接决定者的步骤。
Passo per TASKLET_1
Estic a DECIDER_1 i vaig al STEP: 2
Passo per TASKLET_2
Estic a DECIDER_2 i vaig al STEP: 3
Passo per TASKLET_3
Estic a DECIDER_1 i vaig al STEP: 2
Estic a DECIDER_2 i vaig al STEP: 3
Estic a DECIDER_1 i vaig al STEP: 2
Estic a DECIDER_2 i vaig al STEP: 3
Estic a DECIDER_1 i vaig al STEP: 2
... (bug)
有一个类似的问题描述
根据我对该问题的回答,看看我的评论:
这不行。 SpringBatch不是为了在单个作业启动期间多次执行特定步骤。 该框架保留了该步骤及其读者和作者的几个内部状态。 您需要在运行时进入实例化的作业结构,并以某种方式重置步骤的状态以及读者和编写者。 但那是如此丑陋和肮脏的黑客; 绝对不是你想做的事情。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.