【问题标题】:Creating a iterating flow steps in Spring Batch在 Spring Batch 中创建迭代流步骤
【发布时间】:2017-08-30 23:42:11
【问题描述】:

我正在做一个流程步骤,需要在不同的时刻重复相同的步骤。在我们有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;
    }
}

决策者类模型:

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)

【问题讨论】:

    标签: java spring spring-batch


    【解决方案1】:

    有一个类似的问题描述在

    How to run a step in a loop in Spring Batch : Updated

    在我对该问题的回答下查看我的评论:

    这行不通。 SpringBatch 不打算在单个作业启动期间多次执行特定步骤。该框架保留了步骤及其读取器和写入器的多个内部状态。您需要在运行时侵入实例化的作业结构,并以某种方式重置步骤和读取器和写入器的状态。但这太丑陋了,太肮脏了。绝对不是你想做的事。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-17
      • 2021-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-11
      • 1970-01-01
      • 2018-09-27
      相关资源
      最近更新 更多