-
스프링 배치 도메인 이해 -JobExecutionStudy/Spring Batch 2024. 2. 8. 08:21
JobExecution
1) 기본 개념
- JobInstance 에 대한 한번의 시도를 의미하는 객체로서 Job 실행 중에 발생한 정보들을 저장하고 있는 객체
- 시작시간, 종료시간 ,상태(시작됨,완료,실패),종료상태의 속성을 가짐
- JobExecution은 JobInstance가 실행될 때마다 생성이 된다.
- JobInstance 과의 관계
- JobExecution은 'FAILED' 또는 'COMPLETED‘ 등의 Job의 실행 결과 상태를 가지고 있음. (Batch Status)
- JobExecution 의 실행 상태 결과가 'COMPLETED’ 면 JobInstance 실행이 완료된 것으로 간주해서 재실행이 불가함
- JobExecution 의 실행 상태 결과가 'FAILED’ 면 JobInstance 실행이 완료되지 않은 것으로 간주해서 재실행이 가능함
- JobParameter 가 동일한 값으로 Job 을 실행할지라도 JobInstance 를 계속 실행할 수 있음
- JobExecution 의 실행 상태 결과가 'COMPLETED’ 될 때까지 하나의 JobInstance 내에서 여러 번의 시도가 생길 수 있음
2) BATCH_JOB_EXECUTION 테이블과 매핑
JobInstance와 JobExecution는 1:N의 관계로서 JobInstance에 대한 성공/실패 내역을 갖고 있다.
실습
실습 1) COMPLETED 케이스
INFO 79263 --- [ main] o.s.b.a.b.JobLauncherApplicationRunner : Running default command line with: [name=user1] INFO 79263 --- [ main] o.s.b.c.l.support.SimpleJobLauncher : Job: [SimpleJob: [name=JobExecution]] launched with the following parameters: [{name=user1}] INFO 79263 --- [ main] o.s.batch.core.job.SimpleStepHandler : Executing step: [step1] step1 has executed INFO 79263 --- [ main] o.s.batch.core.step.AbstractStep : Step: [step1] executed in 16ms INFO 79263 --- [ main] o.s.batch.core.job.SimpleStepHandler : Executing step: [step2] step2 has executed INFO 79263 --- [ main] o.s.batch.core.step.AbstractStep : Step: [step2] executed in 12ms INFO 79263 --- [ main] o.s.b.c.l.support.SimpleJobLauncher : Job: [SimpleJob: [name=JobExecution]] completed with the following parameters: [{name=user1}] and the following status: [COMPLETED] in 78ms
COMPLETED 상태로 종료되는 잡을 실행시켜본다.
- BATCH_JOB_INSTANCE 테이블
- BATCH_JOB_EXECUTION 테이블
STATUS 및 EXIT_CODE 컬럼이 COMPLETED로 저장 - BATCH_JOB_EXECUTION_PARAMS 테이블
COMPLETED로 끝났기 때문에 동일 파라미터로 재실행하면 다음과 같은 에러가 발생한다.
Caused by: org.springframework.batch.core.repository.JobInstanceAlreadyCompleteException: A job instance already exists and is complete for parameters={name=user1}. If you want to run this job again, change the parameters.
실습 2) FAILED 케이스
@Bean public Step step2() { return stepBuilderFactory.get("step2") .tasklet((contribution, chunkContext) -> { System.out.println("step2 has executed"); throw new RuntimeException("step2 has failed!!!"); // return RepeatStatus.FINISHED; }) .build(); }
에러 발생하도록 코드 수정 후 실행한다.
- BATCH_JOB_INSTANCE 테이블
- BATCH_JOB_EXECUTION 테이블
STATUS 및 EXIT_CODE 컬럼이 FAILED로 저장 - BATCH_JOB_EXECUTION_PARAMS 테이블
JOB_EXECUTION 테이블에 FAILED로 저장되었으므로 같은 파라미터로 재실행할 수 있다.
- BATCH_JOB_EXECUTION 테이블(2)
1:N 관계
'Study > Spring Batch' 카테고리의 다른 글
스프링 배치 도메인 이해 -StepExecution (0) 2024.02.15 스프링 배치 도메인 이해 -Step (0) 2024.02.15 스프링 배치 도메인 이해 -JobParameter (1) 2024.02.08 스프링 배치 도메인 이해 -JobInstance (1) 2024.01.30 스프링 배치 도메인 이해 -Job (0) 2024.01.30 - JobInstance 에 대한 한번의 시도를 의미하는 객체로서 Job 실행 중에 발생한 정보들을 저장하고 있는 객체