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 또한 생성됨
2. JobLauncher에 의해 SimpleJob이 실행되면 해당 Job에 속한 Step들과 각각의 Step들 내 Tasklet이 실행되는데 그전에 등록된 JobListener의 beforeJob() 메서드를 먼저 호출한 뒤 실행합니다.
- AbstractJob의 execute() 메서드를 통해 확인 가능
3. Job에서 구성한 Step들을 실행하고 Step 내 구성한 각각의 Tasklet들을 실행합니다.
- 만약 실행된 Step이 Failed 처리가 될 경우 다음 Step을 실행되지 않고 break 처리되어 빠져 나옴
- 이는 SimpleJob의 doExecute() 메서드를 통해 확인 가능
4. Step들을 실행한 뒤 등록된 JobListener의 afterJob() 메서드를 호출합니다.
- AbstractJob의 execute() 메서드 내 finally 절에서 확인 가능
5. 배치 상태를 마지막에 수행된 Step의 상태로 업데이트합니다.
- SimpleJob의 doExecute 메서드 내 확인 가능
- 마지막 Step이 FAILED일 경우 배치 상태도 FAILED
- 마지막 Step이 COMPLETED일 경우 배치 상태도 COMPLETED
위 내용을 정리한 그림
출처
스프링 배치 - Spring Boot 기반으로 개발하는 Spring Batch (정수원 강사님)
반응형
'Spring' 카테고리의 다른 글
[Spring Batch] FlowJob 아키텍처 (0) | 2023.07.11 |
---|---|
[Spring Batch] TaskletStep 아키텍처 (0) | 2023.07.11 |
[Spring Batch] 스프링 배치 도메인 정리 (0) | 2023.07.06 |
[Spring] 트랜잭션 전파 정리 (0) | 2023.04.30 |
[Spring] @Transactional 적용 시 주의 사항 (0) | 2023.04.18 |