ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 간단한 Spring Batch Project 만들기
    SpringBatch 2024. 2. 5. 03:44

    1. Spring Initializr 로 코드 생성하기

    Lombok, JPA, MariaDB Driver, Spring Batch, H2, JDBC 등을 Depecdancies에 추가한 뒤 Generate 한다.

     

    패키지 안에 있는 BatchApplication.java를 열어보면 아래처럼 main 메소드가 보인다.

     

    2-2. Simple Job 생성하기

    Batch Job을 만들기 전에, BatchApplication.java에 다음과 같이 Spring Batch 기능 활성화 어노테이션 (@EnableBatchProcessing)을 추가합니다.

    이 어노테이션을 선언하면, Spring Batch의 여러 기능들을 사용할 수 있게 됩니다.
    선언하지 않으시면 Spring Batch 기능을 사용할 수 없기 때문에 필수로 선언하셔야만 합니다.  --> 이제는 더이상 추가하지 않아도 된다.

    가 아니다~!~!!!  SpringBoot 3.0 이상은

    @EnableBatchProcessing 사용하지 않는다!

    스프링 3.0 마이그레이션 가이드를 살펴보면, @EnableBatchProcessing 사용 시 Spring Batch 기본 설정이 백오프된다고 설명된다.

    추가하지도 말고 다른 사람 코드를 참고할 때 무조건 지우자.

     

    여기 저기서 코드 찾으면 죄다 이 @EnableBatchProcessing이 추가 되어있는데, 전에 Batch 프로젝트 작성했을 때도 넣기도 했고,

    강의에서도 넣길래 이거 따라 했다가 본인은 사흘동안 헤맸다.

     

     

     

     

     

     

    설정이 끝났다면 패키지 아래에 job 패키지를 생성하고, SimpleJobConfiguration.java 파일을 생성한다.

     

     

    생성한 Java 파일 안에 simpleJob 이란 이름의 간단한 Spring Batch 코드를 작성해봅니다.

    package com.example.playground.config;
    
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.batch.core.Job;
    import org.springframework.batch.core.Step;
    import org.springframework.batch.core.job.builder.JobBuilder;
    import org.springframework.batch.core.repository.JobRepository;
    import org.springframework.batch.core.step.builder.StepBuilder;
    import org.springframework.batch.core.step.tasklet.Tasklet;
    import org.springframework.batch.repeat.RepeatStatus;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.transaction.PlatformTransactionManager;
    
    @Slf4j
    @Configuration
    public class SimpleJobConfiguration  {
        @Bean
        public Job simpleJob(JobRepository jobRepository, Step simpleStep1) {
            return new JobBuilder("simpleJob", jobRepository)
                    .start(simpleStep1)
                    .build();
        }
    
        @Bean
        public Step simpleStep1( JobRepository jobRepository, Tasklet testTasklet, PlatformTransactionManager platformTransactionManager){
            return new StepBuilder("simpleStep1", jobRepository)
                    .tasklet(testTasklet, platformTransactionManager).build();
        }
        @Bean
    
        public Tasklet testTasklet(){
            return ((contribution, chunkContext) -> {
                log.info(">>>>> This is Step1");
                return RepeatStatus.FINISHED;
            });
        }
    }
    • @Configuration
      • Spring Batch의 모든 Job은 @Configuration으로 등록해서 사용합니다.
    • @Bean
      • Bean으로 등록하여 여러 곳에서 공유하여 사용할 수 있도록 합니다.
    • jobBuilderFactory.get("simpleJob")
      • simpleJob 이란 이름의 Batch Job을 생성합니다.
      • job의 이름은 별도로 지정하지 않고, 이렇게 Builder를 통해 지정합니다.
    • stepBuilderFactory.get("simpleStep1")
      • simpleStep1 이란 이름의 Batch Step을 생성합니다.
      • jobBuilderFactory.get("simpleJob")와 마찬가지로 Builder를 통해 이름을 지정합니다.
    • .tasklet((contribution, chunkContext))
      • Step 안에서 수행될 기능들을 명시합니다.
      • Tasklet은 Step안에서 단일로 수행될 커스텀한 기능들을 선언할때 사용합니다.
      • 여기서는 Batch가 수행되면 log.info(">>>>> This is Step1") 가 출력되도록 합니다.

     

    전체 코드는 아래의 경로에도 있다.

    https://github.com/RohMinji/playground

     

    GitHub - RohMinji/playground: 가장 간단한 spring batch 코드

    가장 간단한 spring batch 코드. Contribute to RohMinji/playground development by creating an account on GitHub.

    github.com

     

    2.수정

    resources/application.yml

    spring:
      profiles:
        active: mariadb
    
    ---
    
    spring:
      profiles:
        active: local
      datasource:
        hikari:
          jdbc-url: jdbc:h2:mem:db;MODE=MYSQL;
          username: sa
          password:
          driver-class-name: org.h2.Driver
      jpa:
        hibernate:
    #       ddl-auto: create
          naming:
            physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
    
    ---
    
    spring:
      profiles:
        active: mariadb
      datasource:
        hikari:
          jdbc-url: jdbc:mariadb://{VM IP}:{PORT}/my_database
          username: 유저네임
          password: 비밀번호
          driver-class-name: org.mariadb.jdbc.Driver
      jpa:
        hibernate:
          ddl-auto: create
        properties:
          hibernate:
            show_sql: true
            format_sql: true
      batch:
        job:
          enabled: true
          name: ${job.name:NONE}
        jdbc:
          initialize-schema: always

     

    build.gradle

    plugins {
        id 'java'
        id 'org.springframework.boot' version '3.0.5'
        id 'io.spring.dependency-management' version '1.1.0'
    }
    
    group = 'com.example'
    version = '0.0.1-SNAPSHOT'
    sourceCompatibility = '17'
    
    configurations {
        compileOnly {
            extendsFrom annotationProcessor
        }
    }
    
    repositories {
        mavenCentral()
    }
    
    dependencies {
        // Spring Batch
        implementation 'org.springframework.boot:spring-boot-starter-batch'
        // Spring Data JPA
        implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
        // h2 DB
        implementation 'com.h2database:h2'
        // 스프링 웹
        implementation 'org.springframework.boot:spring-boot-starter-web'
        // 롬복
        compileOnly 'org.projectlombok:lombok'
        annotationProcessor 'org.projectlombok:lombok'
        testImplementation 'org.springframework.boot:spring-boot-starter-test'
        // mariadb
        implementation 'org.mariadb.jdbc:mariadb-java-client:2.7.4'
    
        testImplementation 'org.springframework.boot:spring-boot-starter-test'
    }
    
    tasks.named('test') {
        useJUnitPlatform()
    }

     

    3.실행

    Edit Configurations 를 눌러 실행할 job이 무엇인지 지정해준다.

     

     

    실행결과 확인

     

     

     

     

     

    참고 사이트

     

    https://jojoldu.tistory.com/325

     

    2. Spring Batch 가이드 - Batch Job 실행해보기

    이번 시간에는 간단한 Spring Batch Job을 생성 & 실행하면서 전반적인 내용을 공부해보겠습니다. 작업한 모든 코드는 Github에 있으니 참고하시면 됩니다. 2-1. Spring Batch 프로젝트 생성하기 기본적인

    jojoldu.tistory.com

    https://velog.io/@calaf/Spring-Batch-%EC%82%AC%EC%9A%A9%ED%95%B4%EB%B3%B4%EA%B8%B0-1.-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0

     

    Spring Batch 5.x ~ 사용해보기 - 1. 시작하기

    Spring Batch 시작하기!

    velog.io

     

Designed by Tistory.