ABOUT ME

Today
Yesterday
Total
  • 1.SpringBatch 빠르게 시작하기
    Spring/Spring Batch 2024. 10. 20. 17:49

     

    페이스북에서 SpringBatch 스터디 모집한다는 글을 보았고, 신청해서 참여하게 되었습니다.

    스터디 진행 방식은  Devocean 블로그 pringBatch 연재 시리즈를 보고 실습을 통해, SpringBatch의 기초를 학습하고 서로 논의를 하며 공부하는 스터디입니다.

     

    앞으로 스터디가 진행되는 동안 공부한 내용을 정리하고자 합니다.
    틀리거나 보충 할 내용이 있다면 댓글 부탁드립니다.

    참고 : [SpringBatch 연재 01] SpringBatch 빠르게 시작하기


    1. SpringBatch 프로젝트 구성

    인텔리제이를 통해 프로젝트 이름 및 JDK 17로 프로젝트 생성 후 build.gradle에 필요한 의존성을 설정합니다.

    plugins {
        id 'java'
        id 'org.springframework.boot' version '3.2.2'
        id 'io.spring.dependency-management' version '1.1.4'
    }
    
    group = 'com.schooldevops.spring-batch'
    version = '0.0.1-SNAPSHOT'
    
    java {
        sourceCompatibility = '17'
    }
    
    configurations {
        compileOnly {
            extendsFrom annotationProcessor
        }
    }
    
    repositories {
        mavenCentral()
    }
    
    dependencies {
        runtimeOnly 'com.h2database:h2'
        implementation 'org.springframework.boot:spring-boot-starter-web'
        implementation 'org.springframework.boot:spring-boot-starter-batch'
        testImplementation 'org.springframework.boot:spring-boot-starter-test'
        testImplementation 'org.springframework.batch:spring-batch-test'
        compileOnly 'org.projectlombok:lombok'
        annotationProcessor 'org.projectlombok:lombok'
    }
    
    tasks.named('test') {
        useJUnitPlatform()
    }

     

     

    SpringBatch 프로젝트를 구성하기 위한 필수 의존성

    implementation 'org.springframework.boot:spring-boot-starter-batch'

     

    h2가 runtime시에 필요하기 때문에 rumtimeOnly로 h2 의존성을 추가

    runtimeOnly 'com.h2database:h2'

    2. h2 설정

    # H2 DataBase용
    spring:
      batch:
        jdbc:
          initialize-schema: always
        job:
          enabled: true
      datasource:
        driver-class-name: org.h2.Driver  # Database를 H2로 사용하겠다.
        url: jdbc:h2:~/test  # H2 접속 정보
        username: sa  # H2 접속 시 입력할 username 정보 (원하는 것으로 입력)
        password:  # H2 접속 시 입력할 password 정보 (원하는 것으로 입력)
        hikari:
          maximum-pool-size: 10
      h2:
        console: # H2 DB를 웹에서 관리할 수 있는 기능
          enabled: true           # H2 Console 사용 여부
          path: /h2-console       # H2 Console 접속 주소
      jpa:
        hibernate:
          ddl-auto: update
        show-sql: true
        properties:
          hibernate:
            format_sql: true
            dialect: org.hibernate.dialect.MySQL5InnoDBDialect

     

    SpringBatch 실행 시 DB 설정을 해주지 않으면, DataSoruce 설정이 필요하다고 에러가 나오며 실행이 되지 않을 것입니다.

    빠른 구성을 위해 h2 embedded 설정해서 DataSource 설정해보도록 하겠습니다.

     

    접속 URL : http://localhost:8080/h2-console

    h2 접속화면

    h2에 접속하게 되면 위와 같은 화면이 나올 것입니다.

    yaml에 설정해 놓은 접속정보를 통해 접속을 해봅시다.

     

    SpringBatch에 필요한 기본 테이블이 생성된 것을 볼 수 있습니다.

     

    spring:
      batch:
        jdbc:
          initialize-schema: always

     

    위와 같이 schema: always로 설정 했기 때문에 서버가 구동 시 기본 테이블을 매번 새로 생성하고 있습니다.

     

    자동 생성 시 spring.batch.jdbc.initialize-schema 설정은 ALWAYS, EMBEDDED, NEVER로 설정이 가능합니다.

    • ALWAYS : 스크립트를 항상 실행합니다. RDBMS 설정이 되어 있을 경우 내장 DB보다 우선적으로 실행됩니다.
    • EMBEDDED : 내장 DB일 때만 실행되며 스키마가 자동 생성됩니다. (기본값)
    • NEVER : 스크립트를 항상 실행하지 않습니다. 운영에서 수동으로 스크립트 생성 후 설정하는 것을 권장합니다. 내장 DB일 경우 스크립트가 생성이 안되기 때문에 오류가 발생합니다.

    그래도 접속이 안된다면, @EnableBatchProcessing 어노테이션을 붙였는지 확인 해보도록 합니다.

     Spring Boot 3.0에서는 '@EnableBatchProcessing' 사용이 권장되지 않습니다.

     

    이전에는 이 어노테이션이 Spring Batch의 자동 구성을 활성화하는 데 사용되었지만, 이제는 더 이상 필요하지 않아 어플리케이션에서 제거해야 합니다.

     '@EnableBatchProcessing'을 추가하면 Spring Batch의 자동 구성(메타데이터 테이블 생성, 작업 시작 시 자동 실행 등)이 비활성화되기 때문입니다.


    3. 스프링배치 스키마 구조

    • 스프링배치를 수행하면 자동으로 배치를 위한 스키마가 생성이 된다.
    • 다음은 스키마 구조이다.

     

    Spring Batch의 메타데이터 스키마는 배치 작업의 실행 기록을 추적하고, 재시작 시 상태를 관리하는 데 사용된다. 스키마는 주로 다음과 같은 주요 테이블들로 구성된다.

     

    https://docs.spring.io/spring-batch/reference/schema-appendix.html

     

    Meta-Data Schema :: Spring Batch

    The Spring Batch Metadata tables closely match the domain objects that represent them in Java. For example, JobInstance, JobExecution, JobParameters, and StepExecution map to BATCH_JOB_INSTANCE, BATCH_JOB_EXECUTION, BATCH_JOB_EXECUTION_PARAMS, and BATCH_ST

    docs.spring.io

     

    댓글

Designed by Tistory.