송민준의 개발노트

스프링 배치 초기세팅 본문

웹/Spring Batch

스프링 배치 초기세팅

송민준 2022. 7. 25. 23:03
@SpringBootApplication
// 총 4개의 설정 클래스를 실행시키며 스프링 배치의 모든 초기화 및 실행 구성이 이루어진다
@EnableBatchProcessing
public class SpringBatchApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBatchApplication.class, args);
    }

}

 

스프링 배치 초기화 설정 클래스는 총 3가지가 있다.

1. BatchAutoConfiguration

- 배치가 초기화 될 때 자동으로 실행되는 설정 클래스

- Job을 수행하는 JobLauncherApplicationRunner 빈을 생성

 

2. SimpleBatchConfiguration

- JobBuilderFactory와 StepBuilderFactory 생성

- 스프링 배치의 주요 구성 요소 생성 - 프록시 객체로 생성됨

 

3. BatchConfigurerConfiguration

- BasicBatchConfigurer

  - SimpleBatchConfiguration에서 생성한 프록시 객체의 실제 대상 객체를 생성하는 설정 클래스

  - 빈으로 의존성 주입 받아서 주요 객체들을 참조해서 사용할 수 있다.

- JpaBatchConfigurer

  - JPA 관련 객체를 생성하는 설정 클래스

 

순서

@EnableBatchProcessing - SimpleBatchConfiguration - BatchConfigurerConfiguration - BatchAutoConfiguration

 

 

DB 스키마 생성

1. 스프링 배치 메타 데이터

- 스프링 배치의 실행 및 관리를 위한 목적으로 여러 도메인들(Job, Step 등)의 정보들을 저장, 업데이트, 조회할 수 있는 스키마 제공

- 과거, 현재의 실행에 대한 세세한 정보, 실행에 대한 성공과 실패 여부 등을 일목요연하게 관리함으로서 배치운용에 있어 리스크 발생시 빠른 대처 가능

- DB와 연동할 경우 필수적으로 메타 테이블이 생성 되어야 함

 

2. 스키마 생성 설정

- 수동 생성 : 쿼리 복사 후 직접 실행

- 자동 생성 : spring.batch.jdbc.initialize-schema 설정

  1) ALWAYS 

     - 스크립트 항상 실행, 내장 DB보다 우선적 실행

  2) EMBEDDED 

     - 내장 DB일 때만 실행됨, 기본값임

  3) NEVER

    - 스크립트 항상 실행 안함, 내장 DB일 경우 스크립트가 생성 안되기 때문에 오류 발생

 

3. 관련 테이블

- Job 관련 테이블

  1) BATCH_JOB_INSTANCE

    - job이 실행될 때 JobInstance정보가 저장되며 job_name과 job_key를 키로 하여 하나의 데이터가 저장됨.

    - 동일한 job_name과 job_key로 중복 저장될 수 없다.

  2) BATCH_JOB_EXECUTION

    - job의 실행정보가 저장되며 Job 생성, 시작, 종료 시간, 실행상태, 메시지 등을 관리

  3) BATCH_JOB_EXECUTION_PARAMS

    - job과 함께 실행되는 JobParameter 정보를 저장

  4) BATCH_JOB_EXECUTION_CONTEXT

    - job의 실행동안 여러가지 상태정보, 공유 데이터를 직렬화(Json 형식)해서 저장

    - Step 간 서로 공유 가능함

 

- Step 관련 테이블

  1) BATCH_STEP_EXECUTION

    - Step의 실행정보가 저장되며 생성, 시작, 종료 시간, 실행상태, 메시지 등을 관리

  2) BATCH_STEP_EXECUTION_CONTEXT

    - Step의 실행동안 여러가지 상태정보, 공유 데이터를 직렬화(Json 형식)해서 저장

    - Step별로 저장되며 Step간 서로 공유할 수 없음

 

출처 강의

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B0%B0%EC%B9%98/unit/91282