Job이란
- 배치 계층 구조에서 가장 상위에 있는 개념으로, 하나의 배치 작업 그 자체를 의미한다.
- Job Configuration을 통해 생성되는 객체 단위
- 반드시 한 개 이상의 Step으로 구성된다.
배치는 큰 틀에서 Job 설정 → Step 설정 → 설정한 Job을 JobLauncher가 실행 → Job 구동 → Job이 각각의 Step을 실행 → Step이 Step 안에 정의한 Tasklet을 실행의 순서로 실행된다.
Job의 종류
1) SimpleJob
- 순차적으로 Step을 실행시키는 Job을 말한다.
- 보편적인 Job을 만들 때 사용된다.
2) FlowJob
- 특정한 조건과 흐름에 따라 Step을 구성하여 실행시키는 Job을 말한다.
- Flow 객체를 실행시켜 작업을 진행한다.
JobInstance
Job이 실행될 때 생성되는 Job의 논리적 실행 단위 객체다. Job의 설정과 구성이 동일해도 JobInstance는 구분된다. 예를 들어 하루에 한 번씩 배치 Job이 실행된다면 그 각각의 Job을 JobInstance라고 한다.
처음 시작하는 Job과 JobParameters로 실행을 한다면 새로운 JobInstance가 생성 되고, 그렇지 않으면 이미 존재하는 JobInstance를 리턴해준다.
JobLancher가 배치 Job을 실행하려고 할 때, Job과 JobParameters 인자가 필요하다. 이 두 인자를 기반으로 Job과 관련한 정보가 저장되는 JobRepository에서 JobInstance를 찾아 JobInstance를 새로 만들지, 있는 것을 return 할 지 결정한다.
JobParameter
Job을 실행할 때 함께 포함되어 사용되는 객체로, Key와 Value를 가진 Map을 포함하여 이 값이 db에 저장된다. 이 값을 이용해 JobInstance들을 서로 구분한다.
JobExecution
JobExecution은 Job 실행 중에 발생한 정보들을 저장하고 있는 객체를 말한다. 시작시간, 종료시간, 상태(시작됨, 완료, 실패), 종료상태의 속성을 가지고 있다.
JobExecution의 실행 상태 결과가 COMPLETED면 JobInstance 실행이 완료된 것으로 간주해서 재실행이 불가하다.
그러나 JobExecution의 실행 상태 결과가 FAILED이면 JobInstance 실행이 완료되지 않은 것으로 간주해서 재실행이 가능하다.
JobRepository
Job이 언제 수행되었고, 언제 끝났으며, 몇 번이 실행되었고 실행에 대한 결과 등의 배치 작업의 수행과 관련된 모든 meta data를 저장한다. @EnableBatchProcessing 어노테이션을 선언하면 JobRepository가 자동으로 빈으로 생성된다.
JobLauncher
배치 Job을 실행시키는 역할을 하며, Job과 Job Parameters를 인자로 받으며 요청된 배치 작업을 수행한 후 최종 Client에게 JobExecution을 반환한다.
JobLauncher.run(Job, JobParamters)의 형태로 Job을 실행한다.
JobBuilder
Spring batch는 Job과 Step을 쉽게 생성할 수 있도록 util 성격의 Builder 클래스들을 제공한다.
JobBuilderFactory가 jobBuildFactory.get("jobName")의 형태로 Job을 생성한다.
public Job batchJob() {
return jobBuilderFactory.get("batchJob")
.start(Step)
.next(Step)
.preventRestart(true)
.incrementer(JobParametersIncrementor)
.validator(JobParameterValidator)
.listener(JobExecutionListner)
.build();
}
- start(step) : 처음 실행할 step 설정. 메소드를 실행하면 SimpleJobBuilder를 반환
- next(step) : 다음에 발표할 step. 횟수에 제한은 없으며 모든 next()이 종료가 되면 Job도 함께 종료된다.
등이 있다. 우리 프로젝트에선 이 이상을 사용하진 않았으므로 이 부분은 넘어가겠다.
'Spring boot > Spring batch' 카테고리의 다른 글
Spring batch에서의 Step, Tasklet, Chunk (0) | 2023.03.21 |
---|---|
Spring batch의 기본 구성 (0) | 2023.03.21 |