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

스크린샷 2025-01-11 오후 11 55 18

  • 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()

스크린샷 2025-01-12 오전 1 55 35

  • Job의 재시작 여부를 결정한다.
  • 기본값은 true이고 false로 설정 시 이 Job은 재시작을 지원하지 않게 된다.
  • Job이 실패해도 재시작이 안되며 Job을 재시작하려고 하면 JobRestartException 예외가 발생한다.
  • 재시작과 관련있는 기능으로 Job을 처음 실행하는 것과 아무런 관련이 없다.

📚 incrementer()

  • JobParameters에서 필요한 값을 증가시켜 다음에 사용될 JobParameters 오브젝트를 리턴한다.
  • 기존의 JobParameter 변경없이 Job을 여러 번 시작하고자 할 때
  • RunIdIncrementer 구현체를 지원하며 인터페이스를 직접 구현할 수 있다.

📚 SimpleJob 아키텍처 정리

스크린샷 2025-02-28 오후 4 30 34

Job → Step → Tasklet