0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Spring BatchのTaskletモデルのバッチ作成

Last updated at Posted at 2024-12-21

概要

Spring BatchのTaskletは、単純な処理を実行するためのインターフェースを提供します。Taskletは、1つのステップで実行される処理を定義するために使用されます。以下は、Spring BatchでTaskletを使用したサンプルコードです。

1. 必要な依存関係を追加

build.gradleに必要な依存関係を追加します。

plugins {
    id 'org.springframework.boot' version '3.1.0' // 適切なバージョンを指定
    id 'io.spring.dependency-management' version '1.1.0'
    id 'java'
}

group = 'com.example'
version = '1.0.0'
sourceCompatibility = '17' // 適切なJavaバージョンを指定

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-batch'
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    runtimeOnly 'mysql:mysql-connector-java' // MySQLドライバ
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

2. application.ymlの設定

src/main/resources/application.ymlにMySQLの接続設定を記述します。

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/spring_batch_example
    username: your_username
    password: your_password
    driver-class-name: com.mysql.cj.jdbc.Driver
  jpa:
    hibernate:
      ddl-auto: update
  batch:
    initialize-schema: always # Spring Batchのスキーマを自動生成

logging:
  level:
    org.springframework.batch: DEBUG # デバッグログを有効化(任意)

3. Taskletの実装

Taskletを実装するクラスを作成します。

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;
import org.springframework.stereotype.Component;

@Component
public class MyTasklet implements Tasklet {

    @Override
    public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
        System.out.println("Tasklet is running...");
        // ここに実行したい処理を記述
        return RepeatStatus.FINISHED; // 処理が完了したことを示す
    }
}

4. ジョブとステップの設定

Taskletを使用するジョブとステップを設定します。

import org.springframework.batch.core.Job;
import org.springframework.batch.core.Step;
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@EnableBatchProcessing
public class BatchConfig {

    private final JobBuilderFactory jobBuilderFactory;
    private final StepBuilderFactory stepBuilderFactory;
    private final MyTasklet myTasklet;

    public BatchConfig(JobBuilderFactory jobBuilderFactory, StepBuilderFactory stepBuilderFactory, MyTasklet myTasklet) {
        this.jobBuilderFactory = jobBuilderFactory;
        this.stepBuilderFactory = stepBuilderFactory;
        this.myTasklet = myTasklet;
    }

    @Bean
    public Job myJob() {
        return jobBuilderFactory.get("myJob")
                .start(myStep())
                .build();
    }

    @Bean
    public Step myStep() {
        return stepBuilderFactory.get("myStep")
                .tasklet(myTasklet)
                .build();
    }
}

5. アプリケーションのエントリポイント

Spring Bootアプリケーションのエントリポイントを作成します。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringBatchTaskletApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBatchTaskletApplication.class, args);
    }
}

6. 実行と確認

1.MySQLサーバーを起動し、application.ymlで指定したデータベースとユーザーが正しく設定されていることを確認します。
2.アプリケーションを実行します。
3.コンソールに「Tasklet is running...」と表示され、Spring BatchのメタデータがMySQLデータベースに保存されていることを確認します。

7. MySQLに保存されるデータ

Spring Batchは以下のようなテーブルを自動生成し、ジョブやステップの実行履歴を保存します。

  • BATCH_JOB_INSTANCE
  • BATCH_JOB_EXECUTION
  • BATCH_STEP_EXECUTION
  • BATCH_JOB_EXECUTION_CONTEXT
  • BATCH_STEP_EXECUTION_CONTEXT
    これらのテーブルを確認することで、ジョブの実行状況や履歴を追跡できます。

補足

  • spring.batch.initialize-schema: alwaysは、アプリケーション起動時にSpring Batchのスキーマを自動生成します。本番環境ではneverに設定し、手動でスキーマを作成することを推奨します。
  • MySQLの接続設定(usernameやpassword)は、環境変数や外部設定ファイルを使用して管理することをお勧めします。

このサンプルを基に、必要に応じてTaskletの処理やジョブの構成をカスタマイズしてください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?