2016-08-24 35 views
0

私は(ステップ1と同様に)仕事中に3つのステップがあります。Spring Batch Java Config:例外発生時にステップをスキップして次のステップに進む

@Autowired 
private StepBuilderFactory stepBuilderFactory; 

@Bean 
public Step step1() { 
    return stepBuilderFactory 
      .get("step1") 
      .<String, String> chunk(1) 
      .reader(reader()) 
      .processor(processor()) 
      .writer(writer()) 
      .build(); 
} 

どのように、ステップ1でさえ例外後2および3に進みますか?私はJavaでの設定を意味します。

+0

「StepExecutionListener」を試してみてください。その 'afterStep'はステップフロー処理に役立ちます。 – Minh

答えて

3

は、フローを作成するときに、それを構成する方法の一例です。これは、ジョブビルダーと直接設定するのと似ているはずです。

return new FlowBuilder<SimpleFlow>("name") 
    .start(step1) // 
    .next(step2).on(ExitStatus.FAILED.getExitCode()).to(errorStep) 
    .from(step2).on(ALL_PATTERN).to(step3) 
    .build(); 
+0

私の場合は、単独でまたは1つの例外スローされたかどうか(ステップ2)、私は常にステップ3に進む必要があります。 私は次のようなものを使用します: - ステップ2からFAILへステップ3 - ステップ2から*へステップ3 – Artur

0

StepBuilder.faultTolerantメソッドを使用し、xmlをこのように設定できます。

これはあなたの場合に役立ちます。

これを見てください:http://docs.spring.io/spring-batch/trunk/apidocs/org/springframework/batch/core/step/builder/SimpleStepBuilder.html#faultTolerant--

+0

私は以下を使用しました:SkipPolicyとRetryPolicy、例外の後ステップ実行は 'COMPLETE'ステータスで完了しました。 私は期待しています: 1. step1:exitStatusより前の場合:FAILED、それ以外の場合:完了 2.例外の有無にかかわらず、ステップ2 3.(ステップ1、ステップ2では例外でも例外でもありません) Step3' – Artur

+0

このリンクを読む:https://blog.codecentric.de/en/2012/03/transactions-in-spring-batch-part-3-skip-and-retry/ – Rishi

1

あなたはあなたのステップ

@Bean 
public Step step1(CustomSkipListener customSkipListener) { 
    return stepBuilderFactory 
      .get("step1") 
      .<String, String> chunk(1) 
      .reader(reader()) 
      .processor(processor()) 
      .writer(writer()) 
      .faultTolerant() 
      .skipLimit(10) 
      .skip(RuntimeException.class) 
      .listener(customSkipListener) 
      .build(); 
} 

お知らせ.faultTolerant()から始まるCHAINに続いてSkip Listener

@Component 
public class CustomSkipListener { 

    @OnSkipInRead 
    public void onSkipInRead(Throwable t) { 
     System.out.println("From onSkipInRead -> " + t.getMessage()); 
    } 

    @OnSkipInWrite 
    public void onSkipInWrite(String item, Throwable t) { 
     System.out.println("From onSkipInWrite: " + item + " -> " + t.getMessage()); 
    } 

    @OnSkipInProcess 
    public void onSkipInProcess(String item, Throwable t) { 
     System.out.println("From onSkipInProcess: " + string + " -> " + t.getMessage()); 
    } 
} 

を使用することができます。リスナーの追加は必須ではありません。 listenerを追加すると、スキップが発生したときの動作を処理できます。

ここではいくつかの便利なリンク

http://docs.spring.io/spring-batch/apidocs/org/springframework/batch/core/SkipListener.html

http://docs.spring.io/spring-batch/reference/html/configureStep.html#configuringSkip

関連する問題