ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 스프링 배치 도메인 이해 -JobExecution
    Study/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 관계

    댓글

Designed by Tistory.