Spring Batch ‐ 스프링 배치 실행(Job) - dnwls16071/Backend_Study_TIL GitHub Wiki
📚 배치 초기화 설정
JobLauncherApplicationRunner
- Spring Batch 작업을 시작하는 ApplicationRunner로서 BatchAutoConfiguration에서 생성된다.
- 스프링 부트에서 제공하는 ApplicationRunner 구현체로 애플리케이션이 정상적으로 구동되자마자 실행된다.
- 기본적으로 빈으로 등록된 모든 Job을 실행시킨다.
# application.yml
# Spring Batch 환경 설정 클래스
# Job 이름, 스키마 초기화 설정, 테이블 Prefix 등을 설정할 수 있다.
# 참고 문서 : https://docs.spring.io/spring-boot/appendix/application-properties/index.html#appendix.application-properties.integration
# ❗JobBuilderFactory deprecated : https://github.com/spring-projects/spring-batch/wiki/Spring-Batch-5.0-Migration-Guide#jobbuilderfactory-and-stepbuilderfactory-bean-exposureconfiguration
spring:
batch:
job:
names: job-name # 지정한 Batch Job만 실행한다.(하나 이상의 Job을 실행할 경우 쉼표로 구분해서 입력한다.)
enabled: true # 배치 자동 구성 설정
jdbc:
initialize-schema: always # 스키마 초기화 설정
📚 SimpleJob
- SimpleJob은 Step을 실행시키는 Job 구현체로서 SimpleJobBuilder에 의해 생성된다.
- 여러 단계의 Step으로 구성할 수 있으며, Step을 순차적으로 실행시킨다.
- 모든 Step의 실행이 성공적으로 완료되어야 Job이 성공적으로 완료가 된다.
- 맨 마지막에 실행한 Step의 BatchStatus가 Job의 최종 BatchStatus가 된다.
// 예제 코드
@Bean
public Job batchJob() {
return new JobBuilder("batchJob", jobRepository) // JobBuilder를 생성하는 팩토리, Job의 이름을 매개변수로
.start(step1()) // 처음 실행할 Step 설정, 최초 한 번 설정
.next(step2()) // 다음에 실행할 Step 설정
.incrementer() // JobParameter 값을 자동으로 증가
.preventRestart() // Job의 재시작 가능 여부 설정(기본값은 true)
.validator() // JobParameter를 실행하기 전에 올바르게 구성이 되었는지 검증
.listener() // Job 라이프 사이클의 특정 시점에 콜백 제공받도록 JobExecutionListener 설정
.build(); // SimpleJob 생성
}
start()
, next()
📚 start()
: 최초 한 번 설정, SimpleJobBuilder가 생성되고 반환된다.next()
: 다음에 실행할 Step들을 순차적으로 연결하도록 설정하고 중간에 실패하면 다음 Step으로 이어지지않는다.
validator()
📚 - Job 실행에 꼭 필요한 파라미터를 검증하는 용도
- DefaultJobParametersValidator 구현체를 지원하며, 좀 더 복잡한 제약 조건이 있다면 인터페이스를 직접 구현할 수도 있다.
// 예제 코드 [1]
@Component
public class CustomBatchValidator implements JobParametersValidator {
@Override
public void validate(JobParameters parameters) throws JobParametersInvalidException {
// ...
}
}
// 예제 코드
@Bean
public Job batchJob() {
return new JobBuilder("batchJob", jobRepository)
.start(step1())
.next(step2())
.validator(new CustomBatchValidator()) // 등록 [2]
.build();
}
❗검증 실패시 →
JobParametersInvalidException
예외 발생
Caused by: org.springframework.batch.core.JobParametersInvalidException: name parameters is not found ...
preventRestart()
📚 - Job의 재시작 여부를 결정한다.
- 기본값은 true이고 false로 설정 시 이 Job은 재시작을 지원하지 않게 된다.
- Job이 실패해도 재시작이 안되며 Job을 재시작하려고 하면 JobRestartException 예외가 발생한다.
- 재시작과 관련있는 기능으로 Job을 처음 실행하는 것과 아무런 관련이 없다.
incrementer()
📚 - JobParameters에서 필요한 값을 증가시켜 다음에 사용될 JobParameters 오브젝트를 리턴한다.
- 기존의 JobParameter 변경없이 Job을 여러 번 시작하고자 할 때
- RunIdIncrementer 구현체를 지원하며 인터페이스를 직접 구현할 수 있다.
📚 SimpleJob 아키텍처 정리
Job → Step → Tasklet