5

問題はこれです:私は複数のステップを持つSpringBatchジョブを持っています。ステップ1に基づいて、次のステップを決定する必要があります。終了ステータスをカスタムステータスに設定し、それをジョブ定義ファイルで定義して次のステップに進むことができるように、ジョブパラメータに基づいてSTEP1-passTaskletでステータスを設定できますか?

Example
<job id="conditionalStepLogicJob">
<step id="step1">
<tasklet ref="passTasklet"/>
<next on="BABY" to="step2a"/>
<stop on="KID" to="step2b"/>
<next on="*" to="step3"/>
</step>
<step id="step2b">
<tasklet ref="kidTasklet"/>
</step>
<step id="step2a">
<tasklet ref="babyTasklet"/>
</step>
<step id="step3">
<tasklet ref="babykidTasklet"/>
</step>
</job>

理想的には、ステップ間で自分の終了ステータスを使用する必要があります。それをしてもいいですか?OOTBフローを中断しませんか?することは有効ですか

4

1 に答える 1

10

これを行うにはいくつかの方法があります。

を使用して、メソッドStepExecutionListenerをオーバーライドできます。afterStep

@AfterStep
public ExitStatus afterStep(){
    //Test condition
    return new ExistStatus("CUSTOM EXIT STATUS");
}

または、を使用しJobExecutionDeciderて、結果に基づいて次のステップを選択します。

public class CustomDecider implements JobExecutionDecider  {

    public FlowExecutionStatus decide(JobExecution jobExecution, StepExecution stepExecution) {
        if (/* your conditon */) {
            return new FlowExecutionStatus("OK");
        }
        return new FlowExecutionStatus("OTHER CODE HERE");
    }

}

Xml構成:

    <decision id="decider" decider="decider">
        <next on="OK" to="step1" />
        <next on="OHTER CODE HERE" to="step2" />
    </decision>

<bean id="decider" class="com.xxx.CustomDecider"/>
于 2013-03-14T15:21:22.737 に答える