-
메타데이터 테이블🌱 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
'🌱 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