2017-03-21 21 views
0

私はspring-boot(xml構成なし)を使用している春のバッチアプリケーションを持っています。私は自分のアプリケーションでExitStatusの有用性を理解しようとしています。いずれかの手順の最後に、SQLの更新ステートメントを実行する必要があります。私は以下のようなStepExecutionListenerを持っていることによって、これを達成:Spring Batch - フロー制御のExitStatusの使用

@Component 
public class MyListener extends StepListenerSupport{ 

    @Autowired 
    JdbcTemplate jdbcTemplate; 

    @Transactional 
    @Override 
    public ExitStatus afterStep(StepExecution stepExecution) { 
     jdbcTemplate.execute("some SQL update); 
     return null; 
    } 
} 

あなたが見ることができるように、私は終了ステータスとしてnullを返し、これが正常に動作するように見えます。しかし、これが適切かどうか、またはExitStatusの特定の値を返す必要があるかどうかはわかりません。

答えて

2

ここでnullを返信すると、「あなたがすでに使用しようとしていたExitStatusを無効にしないでください」と効果的に表示されます。

SQLステートメントが失敗した(おそらく例外をスローした)場合、そのステップは失敗しますので、有用性があります。代わりにあなたの仕事の次のステップに幸せに行くでしょう。

ステップとジョブに失敗するには、例外をキャッチしてExitStatus.FAILEDを返す必要があります。

また、ステップのアクティビティに基づいてフロー制御を行うシナリオが必要な場合...ステージングステップであって、処理するレコードがない場合は終了したいステージングするレコードがある場合は、追加のステップを実行します。

jobBuilderFactory.get("myJob") 
      .start(step1()).on("NOOP").end() 
      .from(step1()).on("COMPLETED").to(step2()).end() 
      .from(step1()).on("*").fail() 
      .build(); 
+0

グレート説明:あなたが行う可能性がありますあなたの仕事の設定で次に

@Override public ExitStatus afterStep(StepExecution stepExecution) { if (stepExecution.getReadCount() > 0) { return ExitStatus.COMPLETED; } return ExitStatus.NOOP; } 

:次に、あなたはこのような何かを行う可能性があります!ありがとう –

関連する問題