Spring

[Spring Batch] SimpleJob 아키텍처

꾸준함. 2023. 7. 10. 22:39

SimpleJob 간략 흐름

SimpleJob을 실행하면 Job->Step->Tasklet 순서로 실행이 되고 각 과정마다 메타데이터가 생성되어 DB에 저장이 됩니다.

 

SimpleJob 아키텍처

 

1. JobLauncher가 JobParameters를 받고 JobInstance 신규 생성 여부 및 JobInstance 실행 가능 여부를 파악합니다.

  • JobParameters가 동일한 JobInstance가 존재한다면 해당 JobInstance를 기준으로 실행 가능 여부를 파악
    • 이미 생성된 JobInstance의 배치 상태가 COMPLETED라면 JobRestartException 발생하며 실행 불가
    • JobInstance가 존재하지 않는다면 JobInstance를 신규 생성 
    • SimpleJobLauncher의 run 메서드를 보면 위 프로세스 이해 가능
  • JobInstance가 실행될 때마다 JobExecution을 생성하며 배치 상태가 STARTED로 업데이트
    • ExecutionContext 또한 생성됨

 

JobInstance 생성 여부 및 실행 여부 파악하는 코드

 

2. JobLauncher에 의해 SimpleJob이 실행되면 해당 Job에 속한 Step들과 각각의 Step들 내 Tasklet이 실행되는데 그전에 등록된 JobListener의 beforeJob() 메서드를 먼저 호출한 뒤 실행합니다. 

  • AbstractJob의 execute() 메서드를 통해 확인 가능

 

Job 실행 전 listener의 beforeJob 우선 실행

 

3. Job에서 구성한 Step들을 실행하고 Step 내 구성한 각각의 Tasklet들을 실행합니다.

  • 만약 실행된 Step이 Failed 처리가 될 경우 다음 Step을 실행되지 않고 break 처리되어 빠져 나옴
  • 이는 SimpleJob의 doExecute() 메서드를 통해 확인 가능

 

Job에 구성된 Step들을 실행하는 코드 (실패 시 break문을 통해 빠져 나옴)

 

4. Step들을 실행한 뒤 등록된 JobListener의 afterJob() 메서드를 호출합니다.

  • AbstractJob의 execute() 메서드 내 finally 절에서 확인 가능

 

JobListener의 afterJob 메서드 호출

 

5. 배치 상태를 마지막에 수행된 Step의 상태로 업데이트합니다.

  • SimpleJob의 doExecute 메서드 내 확인 가능
  • 마지막 Step이 FAILED일 경우 배치 상태도 FAILED
  • 마지막 Step이 COMPLETED일 경우 배치 상태도 COMPLETED

 

배치 상태 업데이트

 

위 내용을 정리한 그림

 

 

출처

스프링 배치 - Spring Boot 기반으로 개발하는 Spring Batch (정수원 강사님)

반응형