SPRING BATCH でプログラミングを始める

Patricia Arquette
リリース: 2024-10-22 20:55:02
オリジナル
894 人が閲覧しました

導入

個人または専門のプロジェクトでは、大量のデータを処理することがあります。データ バッチ処理は、データが収集、処理されてからバッチ結果が生成される、大量のデータを処理する効率的な方法です。バッチ処理は多くのユースケースに適用できます。バッチ処理の一般的な使用例は、大規模な CSV または JSON ファイルのセットを、さらなる処理に備えた構造化形式に変換することです。

このチュートリアルでは、Spring ベースのアプリケーションの開発を容易にするフレームワークである Spring Boot を使用してこのアーキテクチャを設定する方法を見ていきます。

Spring-Batchとは何ですか?

Spring Batch は、バッチ処理用のオープンソース フレームワークです。これは、最新のエンタープライズ システムでよく見られる堅牢なバッチ アプリケーションの開発を可能にするように設計された軽量で包括的なソリューションです。その開発は、SpringSource と Accenture とのコラボレーションの結果です。

バッチ開発中に繰り返し発生する問題を解決できるようになります:

  • 生産性
  • 大量のデータの管理
  • 信頼性
  • 車輪の再発明

注意: IT 分野では、バッチとはスタンドアロンで動作し、大量のデータに対して一連の処理操作を実行するプログラムです。

Spring Batchの基本アーキテクチャ

Commencer la programmation avec SPRING BATCH

バッチデータを管理するには、主に次の 3 つのツールを使用します。

JobLauncher: これは、バッチ プログラムの起動/開始を担当するコンポーネントです。それ自体をトリガーするか、外部イベントによってトリガーされるように構成できます (手動起動)。 Spring Batch ワークフローでは、JobLauncher がジョブの実行を担当します。

ジョブ: これは、プログラムで扱われるビジネス ニーズに対する責任が委任されるタスクを表すコンポーネントです。 1 つ以上のステップを順番に起動する役割を果たします。

ステップ: これは、対処する必要があるビジネスの核心部分を包むコンポーネントです。これは、次のように構造化された 3 つのサブコンポーネントを定義する役割を果たします:

ItemReader: これは、処理される入力データの読み取りを担当するコンポーネントです。これらはさまざまなソース (データベース、フラット ファイル (csv、xml、xls など)、キュー) から取得できます。

ItemProcessor: これは、読み取られたデータの変換を担当するコンポーネントです。その中で、すべての管理ルールが実装されます。

ItemWriter: このコンポーネントは、プロセッサによって変換されたデータを 1 つ以上の希望のコンテナ (データベース、フラット ファイル (csv、xml、xls など)、クラウド) に保存します。

JobRepository: これは、実行ごとに JobLauncher、ジョブ、およびステップの監視からの統計を記録するコンポーネントです。これらの統計を保存するために、データベースを使用する方法とマップを使用する方法の 2 つが提供されています。統計がデータベースに保存され、永続的に保存されると、障害が発生した場合に考えられる問題を分析するために、長期にわたってバッチを継続的に監視することができます。逆に、マップ内にある場合、永続化された統計は各バッチ実行インスタンスの終了時に失われます。すべての場合において、どちらか一方を設定する必要があります。

詳細については、Spring の Web サイトを参照することをお勧めします。

Spring バッチ アーキテクチャについて簡単に説明した後、CSV ファイルからデータを読み取り、その後データベースに挿入する Spring バッチ ジョブを設定する方法を示してみましょう。"コーディングを始めましょう".

Commencer la programmation avec SPRING BATCH

プロジェクトのセットアップ

Spring Boot プロジェクトを生成する最も簡単な方法は、以下の手順で Spring Boot ツールを使用することです。

  • Spring Initializr Web サイトにアクセスします
  • Maven プロジェクトと Java 言語を選択します
  • Spring Batch、JPA、Lombok、H2 データベースを追加
  • グループ名に「com.example」、アーティファクトに「SpringBatch」と入力します
  • 生成ボタンをクリックします

Commencer la programmation avec SPRING BATCH

プロジェクトが生成されたら、解凍して IDE にインポートする必要があります。

使用されているテクノロジー:

  • JDK 1.8
  • メイブン
  • インテリJ
  • ロンボク島
  • 春のデータJPA
  • H2 データベース

プロジェクトの依存関係

すべてのプロジェクトの依存関係は pom.xml ファイルにあります。 POM という 3 文字は、Project Object Model の頭字語です。その XML 表現は、Maven によってプロジェクト モデルを表すデータ構造に変換されます。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.pathus</groupId>
    <artifactId>SpringBatchExample</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>SpringBatchExample</name>
    <description>Demo of spring batch project </description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-batch</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.batch</groupId>
            <artifactId>spring-batch-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

プロジェクトの構造

プロジェクトの構造は次のとおりです:

Commencer la programmation avec SPRING BATCH

ジョブ設定

バッチ処理を有効にするには、構成クラスに @EnableBatchProcessing のアノテーションを付ける必要があります。次に、CSV ファイルを読み取るためのリーダーを作成し、書き込む前に入力データを処理するためのプロセッサを作成し、データベースに書き込むためのライターを作成する必要があります。

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.batch.item.ItemProcessor;
import org.springframework.batch.item.ItemReader;
import org.springframework.batch.item.ItemWriter;
import org.springframework.batch.item.file.FlatFileItemReader;
import org.springframework.batch.item.file.LineMapper;
import org.springframework.batch.item.file.mapping.DefaultLineMapper;
import org.springframework.batch.item.file.transform.DelimitedLineTokenizer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;

import com.pathus90.springbatchexample.batch.StudentProcessor;
import com.pathus90.springbatchexample.batch.StudentWriter;
import com.pathus90.springbatchexample.model.Student;
import com.pathus90.springbatchexample.model.StudentFieldSetMapper;

@Configuration
@EnableBatchProcessing
@EnableScheduling
public class BatchConfig {

    private static final String FILE_NAME = "results.csv";
    private static final String JOB_NAME = "listStudentsJob";
    private static final String STEP_NAME = "processingStep";
    private static final String READER_NAME = "studentItemReader";

    @Value("${header.names}")
    private String names;

    @Value("${line.delimiter}")
    private String delimiter;

    @Autowired
    private JobBuilderFactory jobBuilderFactory;

    @Autowired
    private StepBuilderFactory stepBuilderFactory;

    @Bean
    public Step studentStep() {
        return stepBuilderFactory.get(STEP_NAME)
                .<Student, Student>chunk(5)
                .reader(studentItemReader())
                .processor(studentItemProcessor())
                .writer(studentItemWriter())
                .build();
    }

    @Bean
    public Job listStudentsJob(Step step1) {
        return jobBuilderFactory.get(JOB_NAME)
                .start(step1)
                .build();
    }

    @Bean
    public ItemReader<Student> studentItemReader() {
        FlatFileItemReader<Student> reader = new FlatFileItemReader<>();
        reader.setResource(new ClassPathResource(FILE_NAME));
        reader.setName(READER_NAME);
        reader.setLinesToSkip(1);
        reader.setLineMapper(lineMapper());
        return reader;

    }

    @Bean
    public LineMapper<Student> lineMapper() {

        final DefaultLineMapper<Student> defaultLineMapper = new DefaultLineMapper<>();
        final DelimitedLineTokenizer lineTokenizer = new DelimitedLineTokenizer();
        lineTokenizer.setDelimiter(delimiter);
        lineTokenizer.setStrict(false);
        lineTokenizer.setNames(names.split(delimiter));

        final StudentFieldSetMapper fieldSetMapper = new StudentFieldSetMapper();
        defaultLineMapper.setLineTokenizer(lineTokenizer);
        defaultLineMapper.setFieldSetMapper(fieldSetMapper);

        return defaultLineMapper;
    }

    @Bean
    public ItemProcessor<Student, Student> studentItemProcessor() {
        return new StudentProcessor();
    }

    @Bean
    public ItemWriter<Student> studentItemWriter() {
        return new StudentWriter();
    }
}
ログイン後にコピー
ログイン後にコピー

ジョブとステップの構成

最初のメソッドはジョブを定義し、2 番目のメソッドは単一のステップを定義します。ジョブはステップから作成され、各ステップにはリーダー、プロセッサー、ライターが関与します。 ステップ定義では、一度に書き込むデータの量を定義します。この場合、一度に最大 5 レコードを書き込みます。次に、以前に注入した Bean を使用して、リーダー、プロセッサー、およびライターを構成します。ジョブを定義するとき、正確な順序を通じて実行内のさまざまなステップを定義できます。ステップstudentStepは、ジョブリストStudentsJob.
によって実行されます。

@Bean
    public Step studentStep() {
        return stepBuilderFactory.get(STEP_NAME)
                .<Student, Student>chunk(5)
                .reader(studentItemReader())
                .processor(studentItemProcessor())
                .writer(studentItemWriter())
                .build();
    }

    @Bean
    public Job listStudentsJob(Step step1) {
        return jobBuilderFactory.get(JOB_NAME)
                .start(step1)
                .build();
    }
ログイン後にコピー
ログイン後にコピー

リーダーの定義

このバッチ構成では、Reader はデータ ソースを読み取り、ステップ内で連続して呼び出され、定義されているオブジェクト (この場合は Student) を返します。

 @Bean
    public ItemReader<Student> studentItemReader() {
        FlatFileItemReader<Student> reader = new FlatFileItemReader<>();
        reader.setResource(new ClassPathResource(FILE_NAME));
        reader.setName(READER_NAME);
        reader.setLinesToSkip(1);
        reader.setLineMapper(lineMapper());
        return reader;
    }
ログイン後にコピー
ログイン後にコピー

FlatFileItemReader クラスは DefaultLineMapper クラスを使用し、このクラスは DelimitedLineTokenizer クラスを使用します。 DelimitedLineTokenizer の役割は、各行を FieldSet オブジェクトに分解することです。names プロパティはファイル ヘッダーの形式を指定し、各行のデータを識別できるようにします。この名前プロパティは、FieldSet オブジェクトを介してビジネス オブジェクトへのデータ変換実装クラスによって使用されます。これは、fieldSetMapper (StudentFieldSetMapper) プロパティによって示されるクラスです。

import org.springframework.batch.item.file.mapping.FieldSetMapper;
import org.springframework.batch.item.file.transform.FieldSet;

public class StudentFieldSetMapper implements FieldSetMapper<Student> {
    @Override
    public Student mapFieldSet(FieldSet fieldSet) {
        return Student.builder()
                .rank(fieldSet.readString(0))
                .firstName(fieldSet.readString(1))
                .lastName(fieldSet.readString(2))
                .center(fieldSet.readString(3))
                .pv(fieldSet.readString(4))
                .origin(fieldSet.readString(5))
                .mention(fieldSet.readString(6))
                .build();
    }
}

ログイン後にコピー
ログイン後にコピー

LineMapper インターフェイスは、一般にファイルから読み取られた行をマップするために使用されるオブジェクトに行 (文字列) をマップするために使用されます

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.pathus</groupId>
    <artifactId>SpringBatchExample</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>SpringBatchExample</name>
    <description>Demo of spring batch project </description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-batch</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.batch</groupId>
            <artifactId>spring-batch-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

プロセッサの定義

リーダーとは異なり、プロセッサーの実装は機能上のニーズに特化しています。これは必須ではなく、処理に機能的な必要性が予測されない場合は、これなしで問題ありません。この例では、学生オブジェクトのいくつかの属性を大文字に変換するだけの単純なプロセッサを作成しました。この例をさらに進めることもできます。より具体的な機能ケース。

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.batch.item.ItemProcessor;
import org.springframework.batch.item.ItemReader;
import org.springframework.batch.item.ItemWriter;
import org.springframework.batch.item.file.FlatFileItemReader;
import org.springframework.batch.item.file.LineMapper;
import org.springframework.batch.item.file.mapping.DefaultLineMapper;
import org.springframework.batch.item.file.transform.DelimitedLineTokenizer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;

import com.pathus90.springbatchexample.batch.StudentProcessor;
import com.pathus90.springbatchexample.batch.StudentWriter;
import com.pathus90.springbatchexample.model.Student;
import com.pathus90.springbatchexample.model.StudentFieldSetMapper;

@Configuration
@EnableBatchProcessing
@EnableScheduling
public class BatchConfig {

    private static final String FILE_NAME = "results.csv";
    private static final String JOB_NAME = "listStudentsJob";
    private static final String STEP_NAME = "processingStep";
    private static final String READER_NAME = "studentItemReader";

    @Value("${header.names}")
    private String names;

    @Value("${line.delimiter}")
    private String delimiter;

    @Autowired
    private JobBuilderFactory jobBuilderFactory;

    @Autowired
    private StepBuilderFactory stepBuilderFactory;

    @Bean
    public Step studentStep() {
        return stepBuilderFactory.get(STEP_NAME)
                .<Student, Student>chunk(5)
                .reader(studentItemReader())
                .processor(studentItemProcessor())
                .writer(studentItemWriter())
                .build();
    }

    @Bean
    public Job listStudentsJob(Step step1) {
        return jobBuilderFactory.get(JOB_NAME)
                .start(step1)
                .build();
    }

    @Bean
    public ItemReader<Student> studentItemReader() {
        FlatFileItemReader<Student> reader = new FlatFileItemReader<>();
        reader.setResource(new ClassPathResource(FILE_NAME));
        reader.setName(READER_NAME);
        reader.setLinesToSkip(1);
        reader.setLineMapper(lineMapper());
        return reader;

    }

    @Bean
    public LineMapper<Student> lineMapper() {

        final DefaultLineMapper<Student> defaultLineMapper = new DefaultLineMapper<>();
        final DelimitedLineTokenizer lineTokenizer = new DelimitedLineTokenizer();
        lineTokenizer.setDelimiter(delimiter);
        lineTokenizer.setStrict(false);
        lineTokenizer.setNames(names.split(delimiter));

        final StudentFieldSetMapper fieldSetMapper = new StudentFieldSetMapper();
        defaultLineMapper.setLineTokenizer(lineTokenizer);
        defaultLineMapper.setFieldSetMapper(fieldSetMapper);

        return defaultLineMapper;
    }

    @Bean
    public ItemProcessor<Student, Student> studentItemProcessor() {
        return new StudentProcessor();
    }

    @Bean
    public ItemWriter<Student> studentItemWriter() {
        return new StudentWriter();
    }
}
ログイン後にコピー
ログイン後にコピー

ライターの定義

ライターは、プロセッサーからのデータを書き込みます(またはリーダーによって直接読み取られます)。私たちの場合、プロセッサから変換されたオブジェクトを受け取り、その後各オブジェクトがデータベースに保存され、トランザクションが検証されます。

@Bean
    public Step studentStep() {
        return stepBuilderFactory.get(STEP_NAME)
                .<Student, Student>chunk(5)
                .reader(studentItemReader())
                .processor(studentItemProcessor())
                .writer(studentItemWriter())
                .build();
    }

    @Bean
    public Job listStudentsJob(Step step1) {
        return jobBuilderFactory.get(JOB_NAME)
                .start(step1)
                .build();
    }
ログイン後にコピー
ログイン後にコピー

バッチ設定ファイル(application.properties)

 @Bean
    public ItemReader<Student> studentItemReader() {
        FlatFileItemReader<Student> reader = new FlatFileItemReader<>();
        reader.setResource(new ClassPathResource(FILE_NAME));
        reader.setName(READER_NAME);
        reader.setLinesToSkip(1);
        reader.setLineMapper(lineMapper());
        return reader;
    }
ログイン後にコピー
ログイン後にコピー

データベースに書き込むCSVファイル

import org.springframework.batch.item.file.mapping.FieldSetMapper;
import org.springframework.batch.item.file.transform.FieldSet;

public class StudentFieldSetMapper implements FieldSetMapper<Student> {
    @Override
    public Student mapFieldSet(FieldSet fieldSet) {
        return Student.builder()
                .rank(fieldSet.readString(0))
                .firstName(fieldSet.readString(1))
                .lastName(fieldSet.readString(2))
                .center(fieldSet.readString(3))
                .pv(fieldSet.readString(4))
                .origin(fieldSet.readString(5))
                .mention(fieldSet.readString(6))
                .build();
    }
}

ログイン後にコピー
ログイン後にコピー

アプリケーションの起動

バッチ構成のセットアップが完了したら、上記のすべてが機能するかどうかを確認してみましょう

アプリケーションを実行するには、アプリケーションの主要部分である注釈 @SpringBootApplication を含むファイルを探す必要があります。

  @Bean
    public LineMapper<Student> lineMapper() {

        final DefaultLineMapper<Student> defaultLineMapper = new DefaultLineMapper<>();
        final DelimitedLineTokenizer lineTokenizer = new DelimitedLineTokenizer();
        lineTokenizer.setDelimiter(delimiter);
        lineTokenizer.setStrict(false);
        lineTokenizer.setNames(names.split(delimiter));

        final StudentFieldSetMapper fieldSetMapper = new StudentFieldSetMapper();
        defaultLineMapper.setLineTokenizer(lineTokenizer);
        defaultLineMapper.setFieldSetMapper(fieldSetMapper);

        return defaultLineMapper;
    }
ログイン後にコピー

上記のメインを起動するとジョブが開始され、バッチ ランチャーは次のようになります。

import org.springframework.batch.item.ItemProcessor;

import com.pathus90.springbatchexample.model.Student;

public class StudentProcessor implements ItemProcessor<Student, Student> {

    @Override
    public Student process(Student student) {
        student.setFirstName(student.getFirstName().toUpperCase());
        student.setLastName(student.getLastName().toUpperCase());
        student.setCenter(student.getCenter().toUpperCase());
        student.setOrigin(student.getOrigin().toUpperCase());
        student.setMention(student.getMention().toUpperCase());
        return student;
    }
}
ログイン後にコピー

バッチを自動的にトリガーできるようにスケジューラが設定されました。この例では、一度起動されたバッチは 8 秒 ごとに実行されます。 fixedDelay値をミリ秒単位で変更することで、実際に試すことができます。

import java.util.List;

import org.springframework.batch.item.ItemWriter;
import org.springframework.beans.factory.annotation.Autowired;

import com.pathus90.springbatchexample.model.Student;
import com.pathus90.springbatchexample.service.IStudentService;

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class StudentWriter implements ItemWriter<Student> {

    @Autowired
    private IStudentService studentService;

    @Override
    public void write(List<? extends Student> students) {
        students.stream().forEach(student -> {
            log.info("Enregistrement en base de l'objet {}", student);
            studentService.insertStudent(student);
        });
    }
}
ログイン後にコピー

上記のメイン ファイルを実行してバッチを開始するだけでなく、コマンド プロンプトを使用してコマンド mvn spring-boot:run を実行することもできます。

JAR アーカイブ ファイルを使用してアプリケーションを起動することもできます。この場合、次のことを行う必要があります。

  1. コマンド プロンプトを使用してプロジェクトの親フォルダーに移動し、コマンド mvn clean package を実行します。これにより、プロジェクトがパッケージ化されます。

  2. 対象フォルダー内にjarファイルが作成されます。

  3. アプリケーションを実行するには、コマンド java -jar target/generated_file_name-0.0.1-SNAPSHOT.jar

  4. を使用します。

また、Spring バッチ アプリケーションの起動時に H2 コンソールがすでに開始されていること、データベースが自動的に生成され、テーブル Student が作成されていることも確認してください。

Commencer la programmation avec SPRING BATCH

ファイルがデータベースにうまく統合されていることがはっきりとわかります。

注意:設定に応じてトリガーされるスケジューラーを渡さずにバッチを手動で開始したい場合は、コントローラーを使用して呼び出す API を公開しました。ジョブスプリングバッチ。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.pathus</groupId>
    <artifactId>SpringBatchExample</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>SpringBatchExample</name>
    <description>Demo of spring batch project </description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-batch</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.batch</groupId>
            <artifactId>spring-batch-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

URL: http://localhost:8080/load を起動するだけでバッチが起動します

Commencer la programmation avec SPRING BATCH

Spring フレームワークを使用したバッチ プログラミングについての最初の学習は終わりに達しました。何かありましたら、コメントや質問を残してください!

皆さん、楽しく学んでください。この最初のチュートリアルが皆さんにとって有益であることを願っています。

ソースコードはここから入手できます

参考文献

  1. https://spring.io/guides/gs/batch-processing/
  2. https://jeremy-jeanne.developpez.com/tutoriels/spring/spring-batch/#LIII-B-3
  3. https://www.baeldung.com/introduction-to-spring-batch

以上がSPRING BATCH でプログラミングを始めるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!