2017-04-05 58 views
1

我正在做一個流程步驟,需要在不同的時刻重複相同的步驟。直到我們有RepeatStatus.FINISHED,它不會重複同一步驟,但是在其他步驟之後執行上一步。我們已經完成了一個簡化的模型來嘗試它,但它也不起作用。在Spring批處理中創建迭代流程步驟

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類的模型:

任務蕾類模型:

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) 

回答

0

有一個在

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

描述了類似的問題看看我的評論我的回答這個問題下:

這是行不通的。 SpringBatch並不打算在單個作業啓動期間多次執行特定步驟。該框架保留了該步驟及其讀寫器的幾個內部狀態。您需要在運行時切入實例化的作業結構,並以某種方式重置該步驟以及讀者和作者的狀態。但是這很醜陋,而且很髒。絕對不是你想做的事情。

相關問題