자바 기반 표준 배치 기술이 없어서 탄생함
배치핵심패턴
read = 데이터 베이스, 파일 , 큐에서 다량의 데이터 조회
process = 특정 방법으로 데이터를 가공한다.
write = 데이터를 수정된 양식으로 다시 저장한다.
ETL(Extract , Transform , Load) 와 유사하다.
@EnableBatchProcessing = 스프링 배치가 동작하기 위해 선언해야 하는 어노테이션
총 4개의 설정클래스를 실행시키며 스프링 배치의 모든 초기화 및 실행 구성이 이루어진다.
스프링 부트 배치의 자동 설정 클래스가 실행됨으로 빈으로 등록된 모든 Job을 검색해서 초기화와 동시에 Job을 수행하도록 구성됨
스프링 배치 초기화 설정 클래스
1. BatchAutoConfiguration
스프링 배치가 초기화 될때 자동으로 실행되는 클래스
Job을 수행하는 JobLauncherApplicationRunner 빈을 생성 = ApplicationRunner의 구현체이다. 스프링 부트가 실행될때 실행시키는 클래스이다.
2. SimpleBatchConfiguration
JobBuilderFactory 와 StepBuilderFactory 생성
스프링 배치의 주요 구성 요소 생성 - 프록시 객체로 생성됨
3. BatchConfigurer Configuration
BasicBatchConfigurer
SimpleBatchConfiguration 에서 생성한 프록시 객체의 실제 대상 객체를 생성하는 설정 클래스
빈으로 의존성 주입 받아서 주요 객체들을 참조해서 사용할 수 있다.
JpaBatchConfigurer = JPA관련 객체를 생성하는 설정클래스
Custom BatchConfigurer 도 인터페이스를구현하여 가능함
Hello Spring Batch 시작하기
@RequiredArgsConstructor
@Configuration
public class HelloJobConfiguration {
private final JobBuilderFactory jobBuilderFactory;
private final StepBuilderFactory stepBuilderFactory;
@Bean
public Job helloJob() {
return this.jobBuilderFactory.get("helloJob")
.start(helloStep1())
.next(helloStep2())
.build();
}
@Bean
public Step helloStep1() {
return stepBuilderFactory.get("helloStep1")
.tasklet(new Tasklet() {
@Override
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
System.out.println(" ============================");
System.out.println(" >> Hello Spring Batch");
System.out.println(" ============================");
return RepeatStatus.FINISHED;
}
})
.build();
}
public Step helloStep2() {
return stepBuilderFactory.get("helloStep2")
.tasklet((contribution, chunkContext) -> {
System.out.println(" ============================");
System.out.println(" >> Step2 has executed");
System.out.println(" ============================");
return RepeatStatus.FINISHED;
})
.build();
}
}
job이 구동되면 step을 실행하고 step이 구동되면 내부의 비지니스 로직인 Taskelt 을 실행하도록 설정함
REPEATSTATUS.FINSHED (null) 를 줌으로써 tasklet 이 무한반복하지 않고 1번만 실행이 된다.
DB스키마 생성 및 이해
스프링 배치 메타 데이터
스프링 배치의 실행 및 관리를 위한 목적으로 여러 도메인들(job, step , jobparameters..) 의 정보들을 저장 업데이트 , 조회할 수 있는 스키마 제공
과거 , 현재의 실행에 대한 세세한 정보 , 실행에 대한 성성과 실패 여부 등을 일목요연하게 관리함으로서 배치운용에 있어 리스크 발생시 빠른 대처 가능
db와 연동할 경우 필수적으로 메타 테이블이 생성 되어야 함
스키마 생성
/org/springframework/batch/core/schema-*.sql 에 존재함
수동 생성 도 되지만 spring.batch.jdbc.initialize-schema 설정을 통해서 자동으로 생성할 수 있다.
ALWAYS = 스크립트 항상 실행 , RDBMS 가 내장 DB보다 우선적으로 실행
EMBEDDED = 내장 db일때만 실행되며 스키마가 자동생성됨 , default
NEVER = 스크립트 항상 실행 하지 않음 , 운영에서 주로 수동으로 스키마 만들때 사용 , 내장 DB로 할시 스크립트가 생성안되기 때문에 오류가 발생함 -> 메타데이터 테이블이 필수이기 때문
JOB관련 테이블
BATCH_JOB_INSTANCE
Job 이 실행될때 JobInstance 정보가 저장이 되며 job_name과 , job_key를 키로하여 하나의 데이터가 저장
동일한 job_name과 job_key로 중복저장 될 수 없다.
BATCH_JOB_EXECUTION
job의 실행정보가 저장이 되며 job 생성, 시작, 종료시간 , 실행상태 ,메시지 관리
BATCH_JOB_EXECUTIONS_PARAMS
job과 함께 실행되는 JobParameter 정보를 저장
BATCH_JOB_EXECUTION_CONTEXT
job의 실행동안 여러가지 상태정보 , 공유 데이터를 json(직렬화) 해서 저장
Step 간 서로 공유가능
Step 관련 테이블
BATCH_STEP_EXECUTION
Step 의 실행정보가 저장이 되며 , 생성 , 시작 , 종료 시, 실행 상태 , 메시지 등을 관리한다.
BATCH_STEP_EXECUTION_CONTEXT
Step 의 여러가지 상태정보를 json으로 직렬화 해서 저장
Step 별로 저장이 되며 Step 간에 공유할 수 없음
'WEB > Spring Batch' 카테고리의 다른 글
스프링 배치 실행 - Flow (0) | 2023.03.03 |
---|---|
스프링 배치 실행 - Step (0) | 2023.02.28 |
스프링 배치 실행 - Job (0) | 2023.02.23 |
스프링 배치 도메인 이해 (0) | 2023.02.17 |
java brains) Spring Batch (0) | 2021.05.29 |