前提・実現したいこと
Spring Batchを作成しています。
実行時に分岐する為、処理をまとめたいと思いますが、FlowBuilderで作成したFlowをJobへ渡すと
最初の処理が終わらなくなってしまいます。
最終的にやりたいことは
Step1がOKだったら、Step2・Step3・Step4の順で実行
Step1がNGだったら、Step3・Step4を実行
のようにしたく、Step3とStep4をまとめたいため、Flowを使用しようとしております。
※下記ソースコードではまだ分岐まで行っておらず、Flowで処理をまとめるところでつまずいております。
発生している問題・エラーメッセージ
下記ソースにて無限ループになってしまいます。
該当のソースコード
Java
1 @Bean 2 public Job job(@Qualifier("flow1") final Flow flow1 3 ) 4 throws Exception { 5 6 return jobBuilderFactory.get(_JOB_NAME) 7 .incrementer(new RunIdIncrementer()) 8 .start(flow1) 9 .end() 10 .build(); 11 } 12 13 @Bean 14 public Flow flow1( 15 @Qualifier("step1") final Step step1, 16 @Qualifier("step2") final Step step2) throws Throwable { 17 return new FlowBuilder<SimpleFlow>("retryModeFlow") 18 .start(step1) 19 .next(step2) 20 .build(); 21 } 22 23 24 @Bean 25 public Step step1() throws Throwable { 26 return stepBuilderFactory 27 .get(_JOB_STEP_NAME) 28 .tasklet(new Tasklet() { 29 @Override public RepeatStatus execute(StepContribution contribution, 30 ChunkContext chunkContext) throws Exception { 31 System.out.println("step1"); 32 return RepeatStatus.FINISHED; 33 } 34 }) 35 .build(); 36 } 37 38 @Bean 39 public Step step2() throws Throwable { 40 return stepBuilderFactory 41 .get(_JOB_STEP_NAME) 42 .tasklet(new Tasklet() { 43 @Override public RepeatStatus execute(StepContribution contribution, 44 ChunkContext chunkContext) throws Exception { 45 System.out.println("step2"); 46 return RepeatStatus.FINISHED; 47 } 48 }) 49 .build(); 50 }
上記を実行したところ、結果が
step1 step1 step1 step1 step1 ...
となってしまいます。
試したこと
Flowを使用せずJobBuilterに直接Stepを渡した場合だと、正常に終了いたします。
Java
1 @Bean 2 public Job job(@Qualifier("flow1") final Flow flow1 3 ) 4 throws Exception { 5 6 return jobBuilderFactory.get(_JOB_NAME) 7 .incrementer(new RunIdIncrementer()) 8 .start(step1) 9 .next(step2) 10 .build(); 11 } 12 13 14 @Bean 15 public Step step1() throws Throwable { 16 return stepBuilderFactory 17 .get(_JOB_STEP_NAME) 18 .tasklet(new Tasklet() { 19 @Override public RepeatStatus execute(StepContribution contribution, 20 ChunkContext chunkContext) throws Exception { 21 System.out.println("step1"); 22 return RepeatStatus.FINISHED; 23 } 24 }) 25 .build(); 26 } 27 28 @Bean 29 public Step step2() throws Throwable { 30 return stepBuilderFactory 31 .get(_JOB_STEP_NAME) 32 .tasklet(new Tasklet() { 33 @Override public RepeatStatus execute(StepContribution contribution, 34 ChunkContext chunkContext) throws Exception { 35 System.out.println("step2"); 36 return RepeatStatus.FINISHED; 37 } 38 }) 39 .build(); 40 }
step1 step2
補足情報(FW/ツールのバージョンなど)
こちらを参考に作成しております。
https://spring.pleiades.io/spring-batch/docs/current/reference/html/step.html#external-flows
Versions
spring-boot-starter-parent : 2.0.1.RELEASE
お詳しい方、ご教授の程よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。