SpringBatchをDockerで環境構築

SpringBatchをDockerで環境構築

Spring BatchをDockerで環境構築するためには、以下のステップを踏む必要があります。
これには、Spring Batchアプリケーションの作成、Dockerイメージの作成、およびDockerコンテナでの実行が含まれます。
以下に、詳細な手順と必要なファイルの例を示します。

1. Spring Batchアプリケーションの作成

まず、Spring Batchアプリケーションを作成します。
以下は、基本的なSpring Batchアプリケーションの設定例です。

pom.xml (Mavenプロジェクトの場合):

<dependencies>
  <!-- Spring Boot Starter Batch -->
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-batch</artifactId>
  </dependency>

  <!-- Spring Boot Starter Web (optional, for testing or additional features) -->
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
  </dependency>

  <!-- Database dependencies (example: H2 for in-memory database) -->
  <dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>runtime</scope>
  </dependency>
</dependencies>

application.properties:

# Batch Job Configuration
spring.batch.job.enabled=false

# H2 Database Configuration
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password

BatchConfiguration.java:

import org.springframework.batch.core.Job;
import org.springframework.batch.core.Step;
import org.springframework.batch.core.annotation.JobScope;
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.batch.core.step.tasklet.Tasklet;
import org.springframework.batch.core.step.tasklet.TaskletStep;
import org.springframework.batch.repeat.RepeatStatus;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@EnableBatchProcessing
public class BatchConfiguration {

  @Bean
  public Job job(JobBuilderFactory jobBuilderFactory, StepBuilderFactory stepBuilderFactory) {
    return jobBuilderFactory.get("job")
        .start(stepBuilderFactory.get("step").tasklet(tasklet()).build())
        .build();
  }

  @Bean
  @JobScope
  public Tasklet tasklet() {
    return (contribution, chunkContext) -> {
      System.out.println("Spring Batch job is running!");
      return RepeatStatus.FINISHED;
    };
  }
}

2. Dockerfileの作成

次に、Spring BatchアプリケーションをDockerイメージとしてパッケージングするために、Dockerfileを作成します。

Dockerfile:

# 使用するベースイメージ
FROM openjdk:17-jdk-slim

# 作業ディレクトリの設定
WORKDIR /app

# Mavenビルド成果物をコピー
COPY target/myapp.jar /app/myapp.jar

# JARファイルを実行
ENTRYPOINT ["java", "-jar", "myapp.jar"]

3. Docker Composeファイルの作成

複数のコンテナを管理するために、docker-compose.ymlを作成することもできます。
例えば、データベースとSpring Batchアプリケーションを連携させるための設定です。

docker-compose.yml:

version: '3.8'
services:
  database:
    image: "h2:latest"
    ports:
      - "9092:9092"
    environment:
      - JDBC_URL=jdbc:h2:mem:testdb

  app:
    build: .
    depends_on:
      - database
    environment:
      - SPRING_DATASOURCE_URL=jdbc:h2:mem:testdb
      - SPRING_DATASOURCE_USERNAME=sa
      - SPRING_DATASOURCE_PASSWORD=password

4. Dockerイメージのビルドと実行

以下のコマンドを使って、Dockerイメージをビルドし、コンテナを実行します。

# Dockerイメージのビルド
docker build -t myapp .

# Dockerコンテナの実行
docker run -p 8080:8080 myapp

または、Docker Composeを使用する場合:

# Docker Composeでコンテナを起動
docker-compose up --build

この手順で、Spring BatchアプリケーションをDocker環境で構築し、実行することができます。
各ステップで必要な設定やファイルは、プロジェクトの要件に応じて調整してください。