[Spring Batch] Batch Job


このレッスンでは、簡単なSpring Batch Jobを作成して実行します.

1.開発環境の設定

  • 基本プロジェクト開発環境
  • - IntelliJ 
    - Spring Boot 2.1.7
    - Java 11
    - Gradle

  • IntellieJで新しいプロジェクトを作成します.
    (Gradle -> Java)

  • build.勾配の設定
  • build.gradle
    buildscript {
        ext{
            springBootVersion ='2.1.7.RELEASE'
        }
        repositories {
            mavenCentral()
        }
        dependencies {
            classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
        }
    }
    
    apply plugin: 'java'
    apply plugin: 'eclipse'
    apply plugin: 'org.springframework.boot'
    apply plugin: 'io.spring.dependency-management'
    
    group='com.jojoldu.spring'
    version='1.0-SNAPSHOT'
    sourceCompatibility = 1.8
    
    repositories {
        mavenCentral()
    }
    
    dependencies {
        implementation 'org.springframework.boot:spring-boot-starter-batch'
        implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
        implementation 'org.springframework.boot:spring-boot-starter-jdbc'
        runtimeOnly 'com.h2database:h2'
        runtimeOnly 'mysql:mysql-connector-java'
        compileOnly 'org.projectlombok:lombok'
        annotationProcessor 'org.projectlombok:lombok:1.18.10'
        testImplementation 'org.springframework.boot:spring-boot-starter-test'
        testImplementation 'org.springframework.batch:spring-batch-test'
    }
    
  • マスターメソッド
  • を作成

    main->javaでパッケージを生成します.


    生成されたパッケージの下にApplicationというJava classを作成します.
    生成されたクラスに次のコードを記述します.
    Applicaion
    package com.jojoldu.book.springBatch;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class Application {
        public static void main(String[] args){
            SpringApplication.run(Application.class,args);
        }
    }
    
    上記の作業はhttps://start.spring.io/で簡単に設定できます.
    springboot設定が完了しました.簡単なSpring Batch Jobを作成します.

    2.簡易ジョブの作成


    バッチ・ジョブを作成する前に、アプリケーション.JavaにSpring Batch機能を有効にする次の宣言(@EnableBaschProcessing)を追加します.

    次に、宣言宣言宣言後、Spring Batchの複数の機能を使用できます.
    パッケージの下にジョブパッケージを作成します.簡単なJobConfigです.Javaを生成します.

    SimpleJobConfig
    @Slf4j //log 사용을 위한 lombok 어노테이
    @RequiredArgsConstructor//생성자 DI를 위한 lombok 어노테이션
    @Configuration
    public class SimpleJobConfig {
        private final JobBuilderFactory jobBuilderFactory;
        private final StepBuilderFactory stepBuilderFactory;
    
        @Bean
        public Job simpleJob(){
            return jobBuilderFactory.get("simpleJob")
                    .start(simpleStep1())
                    .build();
        }
    
        @Bean
        public Step simpleStep1(){
            return stepBuilderFactory.get("simpleStep1")
                    .tasklet((contribution, chunkContext) -> {
                        log.info(">>>>>>> This is Step1");
                        return RepeatStatus.FINISHED;
                    })
                    .build();
            }
    }
    生成されたjavaファイルにsimpleJobという簡単なSpring Batchコードを記述します.

  • @Configuration
    SpringBatchのすべてのJobは@Configurationとして登録されています.

  • jobBuilderFactory.get("simpleJob")
    simpleJobという名前のBatch Jobを生成します.
    jobBuilder Factoryクラスのget()メソッドを使用してJobBuilderを作成します.
    このようにして生成されたJobBuilderでJobを生成する.

  • .start(simpleStep1())
    Stepを追加して、最も基本的なSimpleJobBuilderを生成します.

  • stepBuilderFactory.get("simpleStep1")
    simpleStep 1という名前のBatch Stepを生成します.
    jobBuilderFactory.get(「simpleJob」)と同様に、ジェネレータで名前を指定します.

  • .tasklet((contribution, chunkContext))
    Stepで実行する機能を示します.
    Taskletは、Stepで単一に実行されるカスタム機能を宣言するために使用されます.
    ここで、バックアップが実行された場合、log.infoが出力されていることを確認します(">>>>>>>This Step 1").
  • この簡単なSpring Batchアプリケーションを実行します.
    初めて作成したアプリケーション.Javaを実行するプライマリメソッドはバッチを実行します.

    上の写真のようにロゴが動いています.info(">>>>>>>This Step 1")は、ログが記録されていることがわかります.

    3.作業の構成


    上のBatch Jobコードを見て、SimepleJobにSimepleStep 1が含まれていることを確認します.

    Spring Batchでは、Jobはバッチ作業単位を表します.このとき、Jobは複数のステップからなる.
    すなわち、バッチ・タスクを実行するために、いくつかのステップを実行するように構成することができる.

    StepはTaskletまたはReader/Processor/Writerからなる.Tasklet
    リーダ/プロセッサ/ライタグループは同じレベルのユニットに構成できない、リーダ/プロセッサが終了したらTaskletで終わるなど.

    Reference


    https://jojoldu.tistory.com/325?category=902551
    https://minholee93.tistory.com/entry/Spring-Batch-Batch-Job?category=924031
    https://hororolol.tistory.com/513