출처
- 해당 포스트는 정수원 강사님의 스프링 배치 - Spring Boot 기반으로 개발하는 Spring Batch 강의를 바탕으로 작성 됐습니다.
목차
- Spring Batch - 14. 배치 초기화 설정 (application.properties)
- Spring Batch - 13. JobLauncher
- Spring Batch - 12. JobRepository
- Spring Batch - 11. ExecutionContext
- Spring Batch - 10. StepContribution
- Spring Batch - 09. StepExecution 와 STEP_EXECUTION 테이블
- Spring Batch - 08. Step
- Spring Batch - 07. JobExecution 와 JOB_EXECUTION 테이블
- Spring Batch - 06. JobParameter 와 JOB_EXECUTION_PARAM 테이블
- Spring Batch - 05. JobInstance 와 JOB_INSTANCE 테이블
- Spring Batch - 04. JobLauncher
- Spring Batch - 03. Job
- Spring Batch - 02. Batch 에서 사용하는 Table
- Spring Batch - 01. @EnableBatchProcessing
JobInstance 생성 및 실행
JobInstance란 Job에 JobParameters가 전달되어 만들어지는 실행가능한 논리적 작업 단위 객체이다.
JobInstance 는 JobLauncher 가 샐행될 때 생성된다.
- JobLauncher 가 실행될 때는 새로운 JobInstance 생성 하거나 기존에 생성된 JobInstance 를 반환한다.
- 처음 시작하는 Job, JobParameter 일 경우 새로운 JobInstance 가 생성된다.
- 이전과 동일한 Job, JobParameter 로 실행 할 경우 이미 존재하는 JobInstance 를 반환한다.
- 내부적으로 JobName 과 JobKey 를 갖고 JobInstance 객체를 얻는다.
- Job 과 JobInstance 와의 관계는 1:N 관계를 갖는다.
BATCH_JOB_INSTANCE 테이블과 매핑
JOB_NAME(Job) 과 JOB_KEY(JobParamter 해시값) 이 동일한 데이터는 중복해서 저장할 수 없다.
- JobRepository 는 Job 실행중에 발생하는 메타 데이터를 DB 에 저장하는 역할을 거친다.
- Job 을 실행할 때 넘겨진 Job 과 JobParameter 값을 갖고 DB 에 확인하는 역할을 한다.
- Job 이 처음 실행하는 Job 인지 확인한다.
- 처음 실행하는 Job 이면 새로운 JobInstance 를 반환한다.
- 존재하는 값이면 기존 JobInstance 를 반환한다.
- 더 이상 Job 이 실행되지 않고
JobInstanceAlreadyCompleteException
예외를 반환한다.
- 더 이상 Job 이 실행되지 않고
|
ApplicationRunner 를 구현한 JobRunner 를 이용해 Job 을 실행시키도록 한다.
- Job 과 JobParameter 객체를 생성해 JobLauncher 를 실행하도록 한다.
|
spring.batch.job.enabled
를 false 로 설정함으로써 Spring boot 에서 자동으로 실행시키지 않도록 한다.