스케쥴링
- 지정된 시간이나 정기적인 간격으로 작업을 실행할 수 있는 기능
전략
1. TaskScheduler
- 스프링 프레임워크의 일부이며, 작업 스케쥴링을 위한 더 높은 수준의 추상화를 제공한다.
TaskScheudler의 schedule 메소드로 예약할 수 있다.
@Scheduled같은 어노테이션으로도 가능하다.
2. Quartz
- 더 복잡한 스케쥴링을 지원
- 스프링 배치 작업을 지정하는 Quartz의 job을 지정할 수 있다.
- 서버 재시작 후에도 계속 실행할 수 있다.
- 클러스터 환경에서 수행할 수도 있다.
- 복잡한 스케쥴링
계속 읽기
작업 실행
JobLauncher
- 특정 매개변수 집합으로 작업을 실행하도록 설계됐다.
- JobParameter를 사용하여 작업 실행을 구분한다.
- 동일한 매개변수로 동일한 작업을 실행하더라도 매개변수가 다르지 않는 한 새로운 실행이 시작되지 않는다.
계속 읽기
SpringBatchTest
단위 테스트
@SpringBatchTest로 단위 테스트를 진행할 수 있다.
- 배치 구성 요소만 로드할 수 있다.
중요성
- 아래의 문제를 검증하기 위해서 테스트를 진행하는 것이 좋다.
- 대량의 데이터 처리할 때 무결설 문제
- 작업이 장기간 발생할 경우 성능 문제
- 오류 처리와 개발자 개입 없이 재시도
계속 읽기
재시도 및 건너뛰기
- 작업 실행 중에 오류를 우아하게 처리하기 위한 중요한 메커니즘
계속 읽기
Listener, Event
배치 리스너
- 배치 실행의 다양한 단계에 Hook을 걸도록 허용
- 작업 실행, 단계 실행 및 청크 처리 모니터링 및 사용자 정의를 위한 메커니즘을 제공
- 리스너는 작업 실행에서 더 풍부한 경험을 주며, 로깅, 오류 처리, 통계 수집 및 알림과 같은 작업을 가능하게 한다.
계속 읽기
JobExecution
- 실행 중인 Job의 특정 인스턴스
- 이벤트에 반응하여 트리거되거나 일정에 따라 실행될 떄마다 Job이 생성
- 실행에 대한 모든 정보를 포함하여, 매개변수, 실행 컨텍스트 및 상태가 포함된다.
- 시작부터 끝까지 전체 프로세스를 캡슐화하여 모니터링 및 관리를 가능하게 한다.
- JobRepository에 저장되어 Job실행의 상태와 컨텍스트를 지속적으로 유지한다.
- STARTED
- STOPPING
- STOPPED
- COMPLETED
- FAILED
- UNKNOWN
- JobParameter와 함께 사용하여
- 고유성 부여 : 매개변수에 의해 고유하게 식별될 수 있다.
- 조건부 로직: 실행 흐름을 결정할 수 있다.
- 재사용성과 유연서어 : 재사용이 가능하고 하드 코딩된 값을 외부에서 매개변수로 받아서 처리할 수 있다.
- ExecutionContext:
- SharingData : 서로 다른 단계 간 데이터와 상태를 공유할 수 있게 해준다.
- Checkpoint Management : 긴 실행 프로세스에서 체크 포인트 관리에 중요하다. Job실패 후 재시작시 ExecutionContext에서 상태를 복원해서 중단지점부터 처리한다.
- Flexibility : 공유 컨텍스트에 데이터를 저장하고 꺼내올 수 있다.
- Customization : 저장해야할 데이터를 정의하고 Job의 요구 사항에 대해서 매우 유연하고 적응 가능하게 만든다.
- 재시작 과정
- SetUpJobRestartability
- HandlingExecutionContext
- JobParameter
- TriggeringRestasrt
- MonitoringAndLogging
계속 읽기
7. JobRepository
- 작업 구성, 작업 매개변수 및 각 단계의 상태와 같은 작업 실행의 메타 데이터를 관리
- 작업 실행 기록
- 단계 실행 세부 정보
- 작업 매개 변수
계속 읽기