SpringBatchのTaskletに引数を渡す方法

SpringBatchのTaskletに引数を渡す方法

Taskletは、Spring Batchにおいてステップの単一のタスクを実行するために使用されるインターフェースです。
このTaskletに引数を渡す方法はいくつかありますが、最も一般的な方法は、JobParametersを使用することです。

JobParametersを使用して引数を渡す

JobParametersは、バッチジョブの実行時に渡されるパラメータを保持するために使用されます。
これらのパラメータは、バッチの各ステップでアクセスすることができ、Tasklet内で利用することができます。

1. JobParametersを作成する

まず、バッチジョブの実行時に必要なパラメータを設定します。
これは、JobLauncherにパラメータを渡す際に行います。

JobParameters jobParameters = new JobParametersBuilder()
    .addString("param1", "value1")
    .addLong("param2", 123L)
    .toJobParameters();

このコードでは、param1という名前で文字列パラメータ、param2という名前で数値パラメータを設定しています。

2. Tasklet内でJobParametersを取得する

次に、Taskletの中でJobParametersを取得し、その値を使用します。
Taskletのexecuteメソッドは、StepContributionとChunkContextを引数に取りますが、ChunkContextからJobParametersを取得できます。

import org.springframework.batch.core.StepContribution;
import org.springframework.batch.core.scope.context.ChunkContext;
import org.springframework.batch.core.step.tasklet.Tasklet;
import org.springframework.batch.repeat.RepeatStatus;

public class MyTasklet implements Tasklet {

  @Override
  public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
    // JobParametersを取得
    String param1 = chunkContext.getStepContext()
                                .getJobParameters()
                                .get("param1")
                                .toString();

    Long param2 = Long.parseLong(chunkContext.getStepContext()
                                             .getJobParameters()
                                             .get("param2")
                                             .toString());

    // 取得したパラメータを使用して処理を行う
    System.out.println("param1: " + param1);
    System.out.println("param2: " + param2);

    return RepeatStatus.FINISHED;
  }
}

ここで、chunkContext.getStepContext().getJobParameters()を通じてJobParametersを取得し、指定されたキーで値を取得しています。
取得した値をTasklet内の処理で使用します。

まとめ

  • JobParametersを使用してバッチジョブにパラメータを渡す。
  • Tasklet内でChunkContextからJobParametersを取得し、必要なパラメータを使用する。

この方法により、Taskletに柔軟にパラメータを渡して、ジョブの実行ごとに異なるデータを使用して処理を行うことができます。