ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 메타데이터 테이블
    🌱 spring/🚛 spring batch 2022. 12. 16. 00:53

    📌 메타 테이블 알아보기


    BATCH_JOB_INSTANCE

    BATCH_JOB_INSTANCE

    SELECT * FROM BATCH_JOB_INSTANCE;

    • JOB_INSTANCE_ID : 테이블의 PK
    • JOB_NAME : 수행한 Batch job name

    BATCH_JOB_INSTANCE 테이블은 Job Parameter에 따라 생성되는 테이블이다.

     

    Job Parameter

    • Spring Batch 가 실행될 때 외부에서 받을 수 있는 파라미터
    • ex) 특정 날짜를 Job Parameter로 넘긴 경우
      • Spring Batch는 해당 날짜 데이터로 데이터를 조회 / 가공 / 입력 등의 작업을 할 수 있다.

     

    같은 Batch Job 이라도 Job Parameter가 다르다면 BATCH_JOB_INSTANCE 에는 기록이 된다.

    • Job Parameter가 같으면 기록되지 않는다.

     

    simpleJob 코드 수정

    @Bean
    public Job simpleJob() {
      return jobBuilderFactory.get("simpleJob")
          .start(simpleStep1(null))
          .build();
    }
    
    @Bean
    @JobScope
    public Step simpleStep1(@Value("#{jobParameters[requestDate]}") String requestDate) {
      return stepBuilderFactory.get("simpleStep1")
          .tasklet((contribution, chunkContext) -> {
            log.info("======== STEP 1 ======");
            log.info("======== RequestDate : {} ======", requestDate);
            return RepeatStatus.FINISHED;
          })
          .build();
    }
    • @JobScope
      • @JobScope, @StepScope Bean을 생성할 때만 JobParameter가 생성되어 사용할 수 있다.

    Program argument 추가

     

    조회

    • 새로운 Job Instance가 추가되었다.

    같은 파라미터로 다시 batch 실행을 하면 정말 새로 생기지 않을까?

    • JobInstanceAlreadyCompleteException Exception 발생

     

    파라미터를 변경해서 실행

    • requestDate 를 20221207 로 변경

     

    BATCH_JOB_INSTANCE 테이블에 정상적으로 추가가 되었다.

     

    따라서 동일한 Job이 Job Parameter가 달라지면 그 때마다 BATCH_JOB_INSTANCE에 생성되고, 동일한 Job Parameter는 여러개 존재할 수 없다.

     

    BATCH_JOB_EXECUTION

    SELECT * FROM BATCH_JOB_EXECUTION;
    

     

    실행했던 파라미터가 없는, 파라미터가 있는 두 개의 simpleJob, 실패한 실행 데이터들이 있다.

     

    JOB_EXECUTION와 JOB_INSTANCE는 부모-자식 관계 이다.

    • JOB_EXECUTION은 자신의 부모인 JOB_INSTANCE가 성공 / 실패한 모든 내역을 가지고 있다.

     

    Spring Batch 는 동일한 Job Parameter로 성공한 기록이 있을 때만 재수행이 안된다!!!

    • 실패한 기록만 있다면 재수행 가능❗

     

    이외에도 JOB 관련 테이블 더 존재

    • ex) BATCH_JOB_EXECUTION_PARAM
      • BATCH_JOB_EXECUTION 테이블이 생성될 당시 입력받은 Job Parameter를 담고 있다.

    JOB 이외에도 STEP 관련 테이블들이 여러개 존재

     

    참고자료

    https://docs.spring.io/spring-batch/docs/3.0.x/reference/html/metaDataSchema.html

    https://docs.spring.io/spring-batch/docs/current/reference/html/schema-appendix.html

    https://yhmane.tistory.com/194

    https://jojoldu.tistory.com/326

    '🌱 spring > 🚛 spring batch' 카테고리의 다른 글

    Spring Batch - Chunk 지향 처리  (1) 2022.12.16
    Spring Batch - Scope  (0) 2022.12.16
    Spring Batch - Job Flow  (0) 2022.12.16
    MySQL 환경 - Spring Batch  (0) 2022.12.16
    Spring Batch  (0) 2022.12.16

    댓글

Designed by Tistory.