Spring Batch ‐ 스프링 배치 시작 - dnwls16071/Backend_Study_TIL GitHub Wiki
📚 스프링 배치 활성화
@EnableBatchProcessing
: 스프링 배치가 작동하기 위해 선언해야 하는 어노테이션
@SpringBootApplication
@EnableBatchProcessing
public class ModuleBatchApplication {
public static void main(String[] args) {
SpringApplication.run(ModuleBatchApplication.class, args);
}
}
- 총 4개의 설정 클래스를 실행시키며 스프링 배치의 모든 초기화 및 실행 구성이 이루어진다.
- 스프링 부트 배치의 자동 설정 클래스가 실행됨으로 빈으로 등록된 모든 Job을 검색해서 초기화와 동시에 Job을 수행하도록 구성된다.
📚 스프링 배치 초기화 설정 클래스
* BatchAutoConfiguration
- 스프링 배치가 초기화 될 때, 자동으로 실행되는 설정 클래스
- Job을 수행하는 JobLauncherApplicationRunner 빈을 생성
* SimpleBatchConfiguration
- JobBuilderFactory와 StepBuilderFactory 생성
- 스프링 배치의 주요 구성 요소들이 프록시 객체로 생성
* BatchConfigurerConfiguration - BasicBatchConfigurer
- BasicBatchConfigurer : SimpleBatchConfiguration에서 생성한 프록시 객체의 실제 대상 객체를 설정하는 클래스
- 빈으로 의존성 주입 받아서 주요 객체들을 참조해서 사용할 수 있다.
* BatchConfigurerConfiguration - JpaBatchConfigurer
- JPA 관련 객체를 생성하는 설정 클래스
❗주의사항 : Spring Batch 설정 방법 차이 존재
버전이 올라감에 따라 강의 내용에서 많이 바뀐 부분도 존재한다. 다음 레퍼런스들을 참고해서 공부하면 좋을 것 같아 남긴다.
📚 스프링 배치 관련 용어
- @Configuration 선언 : 하나의 배치 Job을 정의하고 빈을 설정한다.
- JobBuilderFactory : Job을 생성하는 빌더 팩토리
- StepBuilderFactory : Step을 생성하는 빌더 팩토리
- Job : Job 생성
- Step : Step 생성
- tasklet : Step 안에서 단일 태스크로 수행되는 로직을 구현
- Job을 구동 → Step을 실행 → Tasklet을 실행
❗주의사항 : JobBuilderFactory and StepBuilderFactory bean exposure/configuration
JobBuilderFactory & StepBuilderFactory deprecated Spring Batch v5로 업그레이드 됨에 따라 JobBuilderFactory 대신 JobBuilder, StepBuilderFactory 대신 StepBuilder를 사용한다.
❗주의사항 : Infrastructure beans configuration with @EnableBatchProcessing
Transaction manager bean exposure/configuration 참고 이슈 @EnableBatchProcessing 어노테이션은 Spring Boot 3.x 버전에서 사용하지 않는다.
📚 Batch DB 스키마 생성 및 이해
-
스프링 배치 메타 데이터란?
- 스프링 배치의 실행 및 관리를 위한 목적으로 여러 도메인들의 정보를 저장, 업데이트, 조회할 수 있는 스키마를 제공한다.
- 과거, 현재의 실행에 대한 세세한 정보, 실행에 대한 성공과 실패 여부 등을 일목요연하게 관리함으로서 배치 운용에 있어 리스크 발생 시 빠른 대처가 가능하다.
- DB와 연동할 경우 필수적으로 메타 테이블이 생성되어야 한다.
-
스키마 생성 설정
- 수동 생성
- 자동 생성
- ALWAYS : 스크립트 항상 실행, RDBMS 설정이 되어 있을 경우 내장 DB보다 우선적으로 실행된다.
- EMBEDDED : 내장 DB일 때만 실행되며 스키마가 자동 생성된다.
- NEVER : 스크립트 항상 실행 안함, 내장 DB일 경우 오류가 발생한다.
-
Job 관련 테이블
BATCH_JOB_INSTANCE
: Job이 실행될 때 JobInstance 정보가 저장되며, job_name과 job_key를 키로 하여 하나의 데이터가 저장되며, 동일한 job_name과 job_key가 중복 저장될 수 없다.BATCH_JOB_EXECUTION
: job의 실행 정보가 저장되며 Job 생성, 시작, 종료 시간, 실행 상태, 메시지 등을 관리한다.BATCH_JOB_EXECUTION_PARAMS
: Job과 함께 실행되는 JobParameter 정보를 저장한다.BATCH_JOB_EXECUTION_CONTEXT
: Job의 실행동안 여러가지 상태 정보, 공유 데이터를 직렬화해서 저장하고 Step간 서로 공유가 가능하다.
-
Step 관련 테이블
BATCH_STEP_EXECUTION
: Step의 실행 정보가 저장되며 생성, 시작, 종료 시간, 실행 상태, 메시지 등을 관리한다.BATCH_STEP_EXECUTION_CONTEXT
: Step의 실행동안 여러가지 상태 정보, 공유 데이터를 직렬화해서 저장하고 Step간 서로 공유가 불가능하다.