コンテンツにスキップ

Spring Batch を利用したバッチアプリケーション⚓︎

概要⚓︎

Spring Batch を利用したバッチアプリケーションの簡易な実装サンプルを提供します。

バッチアプリケーションのアーキテクチャについては、 バッチアプリケーションのアーキテクチャ を参照してください。 サンプルではこちらのアーキテクチャに則って、バッチアプリケーションを実装しています。

サンプルで定義されているジョブ⚓︎

サンプルでは以下の 2 つのジョブを定義しています。

  • catalogItem_job

    Chunk モデルで作られたジョブです。商品情報を取得し、商品名を先頭 10 文字に切り詰めたうえで CSV に出力します。

  • catalogItem_tasklet_job

    Tasklet モデルで作られたジョブです。処理内容は catalogItem_job と同様です。

サンプルの起動方法⚓︎

バッチアプリケーションは Web アプリケーションと同様に、 Spring Boot をベースに作られています。 そのためアプリケーションの起動方法についても、 Web アプリケーションと同様に以下の通りです。

  • VS Code で Gradle のタスクを実行する場合

    VS Code のアクティビティーバーにある「 Gradle 」をクリックし、サイドバーの「 GRADLE PROJECTS 」タブから以下のタスクを実行します。

    batch > Tasks > application > bootRun

  • コマンドラインから Gradle のタスクを実行する場合

    以下の通り、コマンドを実行します。

    コマンドラインでの Gradle の起動
    1
    gradlew :batch:bootRun
    
  • VS Code の実行とデバッグビュー(Run and Debug)で起動する場合

    既定の 2 つのジョブそれぞれについて、 launch.json(VS Code 上のアプリケーションの実行構成ファイル)に定義済みです。

    VS Code のアクティビティーバーにある「 Run and Debug 」をクリックし、ビュー上部のドロップダウンリストにて、実行したいアプリケーションを指定して実行してください。

  • 実行可能 jar としてパッケージングした jar を実行する場合

    以下の通り、コマンドを実行します。

    実行可能 jar の起動
    1
    2
    # gradlew :batch:bootJar で実行可能jarを生成した想定
    java -jar batch/build/libs/batch-0.0.1-SNAPSHOT.jar
    

動作させるジョブの指定方法⚓︎

Spring Batch では、複数のジョブが定義されている場合、実行すべきジョブを指定しないとエラーが発生するため、ジョブの指定は必須です。

ジョブの指定方法は spring.batch.job.name という環境変数で指定します。 サンプルでは開発環境用のデフォルト設定として、 application-dev.properties にて spring.batch.job.name=catalogItem_tasklet_job と指定しています。 これにより起動時にジョブを指定しなくても catalogItem_tasklet_job が実行されるようになっています。

application-dev.properties でのジョブ指定
1
spring.batch.job.name=catalogItem_tasklet_job

catalogItem_job を実行するように、起動時に指定する場合には、以下の方法で指定します。

  • Gradle で実行する場合

    以下のように --args オプションで指定します。

    コマンドラインでの Gradle の起動(ジョブ指定)
    1
    gradlew :batch:bootRun --args="--spring.batch.job.name=catalogItem_job"
    

    VS Code から Gradle タスクを実行する場合は、タスク選択時に右クリックを押下することで、オプション引数を付与できます。

  • 実行可能 jar としてパッケージングした jar を実行する場合

    以下のように、コマンドを実行します。

    実行可能 jar の起動(ジョブ指定)
    1
    2
    # gradlew :batch:bootJar で実行可能 jar を生成した想定
    java -jar batch/build/libs/batch-0.0.1-SNAPSHOT.jar --spring.batch.job.name=catalogItem_job
    

ジョブ独自の引数の指定方法⚓︎

Spring Batch で定義されたジョブは、それぞれ独自の引数を定義できます。 本サンプルで定義されている 2 つのジョブは、それぞれ output という名前のオプション引数を定義しており、 出力する CSV ファイル名を設定できます。

実行時に output という引数に sample-output.csv を指定する場合には、以下の方法で指定します。

  • Gradle で実行する場合

    以下のように --args オプションで指定します。

    コマンドラインでの Gradle の起動(ジョブ引数指定)
    1
    gradlew :batch:bootRun --args="output=sample-output.csv"
    

    VS Code から Gradle タスクを実行する場合は、タスク選択時に右クリックを押下することで、オプション引数を付与できます。

  • 実行可能 jar としてパッケージングした jar を実行する場合

    以下のように、コマンドを実行します。

    実行可能 jar の起動(ジョブ引数指定)
    1
    2
    # gradlew :batch:bootJar で実行可能 jar を生成した想定
    java -jar batch/build/libs/batch-0.0.1-SNAPSHOT.jar output=sample-output.csv