Java Spring Batchを使ってstep間でデータのやり取りを行いたいが、putで設定はできるがgetで取得できずに困っております。

実現したいこと

Java Spring Batchを使ってstep間でデータのやり取りを行いたい。

前提

ネットで調査した限りでは、ExecutionContextを使用して実現が可能という記事を見ます。タスクレットモデル、チャンクモデルでExecutionContextを使用してstep間でデータのやり取りができればと考えております。

発生している問題・エラーメッセージ

ExecutionContextのインスタンスを生成してputでキーと値を設定することは可能なことは確認したのですが、次のstepでgetしてもputした値が入っていない状態です。尚、同じstep内であればgetできますが、やりたいことは別stepでgetしたいです。
サンプルコード等頂けたら幸いです。

該当のソースコード

// 1つ目のstepでputでキーと値を設定。設定はできていそう。 @Component public class HelloFirst implements Tasklet { @Override public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception { System.out.println("Hello World First"); // (1) chunkContext.getStepContext().getStepExecution().getExecutionContext() .put("promotion", "value1"); // omitted. return RepeatStatus.FINISHED; } } // 2つ目のstepでgetで取得するもnullで取得されてしまう。 @Component public class HelloSecond implements Tasklet { @Override public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception { System.out.println("Hello World Second"); // (2) Object promotion = chunkContext.getStepContext().getStepExecutionContext() .get("promotion"); // omitted. return RepeatStatus.FINISHED; } }

試したこと

デバッガで追ってみたところ、putで値は設定できていそうだが、getで取得できない。step間をまたぐとNGでまたがなければ(同じstep内)getで取得できる。

補足情報(FW/ツールのバージョンなど)

VSCodeを使用してます。Javaはversion17を使ってます。
その他、2023/7/15時点での最新を使ってます。

コメントを投稿

0 コメント