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

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

## 1. 必要な依存関係を追加
build.gradleに必要な依存関係を追加します。
```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の接続設定を記述します。
```yaml
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を実装するクラスを作成します。
```java
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を使用するジョブとステップを設定します。
```java
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アプリケーションのエントリポイントを作成します。
```java
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の処理やジョブの構成をカスタマイズしてください。