2017-04-05 18 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); 
    } 

} 

そして、それが問題です。最初は大丈夫ですが、2度目やそれ以降は、ステップの直ぐ前に決定します。

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は、単一のジョブの起動中に特定のステップを複数回実行することを意図していません。このフレームワークは、ステップとリーダとライタのいくつかの内部状態を保持します。実行時にインスタンス化されたジョブ構造をハックして、ステップとリーダとライターの状態を何らかの形でリセットする必要があります。しかし、それはとても醜いと汚れたハックです。間違いなくあなたがやりたいことではありません。

関連する問題