[spring-batch] BatchSatus, ExitStatus


BatchStatusとExitStatusの定義


スプリング配置中に現在のジョブまたはStepの状態を示す状態があります.
BatchStatusとExitStatusは、これらのステータスのタイプと見なすことができます.
BatchStatusとExitStatusは少し混同されている可能性があります.spring docsによると、両者の間には以下の違いがあります.

正確ではないかもしれませんが、翻訳の場合、BatchStatusはJobとStepの状態を表し、ExitStatusはStepが終了した状態を表します.
(ただし、検索するとJobにもExitStatusがあります.実行中の状態として、実行後の結果の状態として理解できます.)

もう1つの違いは、「BatchStatus」は「端末タイプ」ですが、「ExitStatus」はコンストラクション関数であるStringオブジェクトのExitCodeなので、ユーザーがカスタマイズして使用するのに便利です.

メタテーブル


これらの状態は、メタテーブルにおいて実行されるJobおよびStepの情報を提供する.
BaschStatusはSTATUS列と一致し、ExitStatusはEXIT CODE列と一致する.
BATCH JOB EXECUTION表

BATCH STEP EXECUTION表

Transition


一般的にExitStatusはBatchStatusと同じですが、開発者が変更できます.
開発者は、ExitStatusに基づいて設定することもできます.たとえば、次の手順を使用してどの手順を実行するか、Jobを終了します.
public Job stepNextConditionalJob() {
    return jobBuilderFactory.get("stepNextConditionalJob")
            .start(conditionalJobStep1())
                .on("FAILED") // FAILED 일 경우
                .to(conditionalJobStep3()) // step3으로 이동한다.
                .on("*") // step3의 결과 관계 없이
                .end() // step3으로 이동하면 Flow가 종료한다.
            .from(conditionalJobStep1()) // step1로부터
                .on("*") // FAILED 외에 모든 경우
                .to(conditionalJobStep2()) // step2로 이동한다.
                .next(conditionalJobStep3()) // step2가 정상 종료되면 step3으로 이동한다.
                .on("*") // step3의 결과 관계 없이
                .end() // step3으로 이동하면 Flow가 종료한다.
            .end() // Job 종료
            .build();
}
以下のとおりです.on()一致するExitCodeをパラメータに渡し,分岐文とする.
Jobを終了する方法は、end()、fail()、stop()を呼び出すことによって指定できます.
この処理は、スプリング配置においてtransitionと呼ばれる.
このように、ジョブを終了する方法がシーケンスのステップフローで終了するのではなく、ユーザ定義の順序でジョブを終了する場合、合計3つのtransition element:end()、fail()、stop()がある.

  • end:JobのBatchStatusをCOMPLETEDの状態で終了させ、Jobの再起動を防止する.
    (statusはパラメータとして入れることができます(end()ですが、実際のメタテーブルにはBatchStatusではなくExitCodeと表示されます).

  • faile:ジョブをFAILED状態に停止します.end()とは異なり、Jobの再起動は阻止されません.(失敗したステップから再起動します.)

  • stop:JobはSTOPPED状態に停止した.fail()とは異なり、restart stepを必須として指定する必要があります.
  • したがって、ジョブ実行時にジョブInstanceのジョブExecutionが既に存在し、ステータスがFAILEDまたはSTOPPEDである場合、設定されたブレークポイントからジョブを再起動することができる.transitionがない場合、Jobのstatusは次のようになります.
    @Bean
    public Job job() {
        return this.jobBuilderFactory.get("job")
    	    .start(step1())
                .build();
    }
  • の最後のステップのExitStatusがFAILEDである場合、JobのBatchStatusおよびExitStatusはいずれもFILAEDである.
  • の最後のステップのExitStatusがCOMPLETEDである場合、JobのBatchStatusおよびExitStatusはいずれもCOMPLETEDである.
  • リファレンス
    https://docs.spring.io/spring-batch/docs/current/reference/html/index-single.html#spring-batch-intro
    http://hwannnn.blogspot.com/2018/06/step-flow.html