[Spring] Spring Batch 의 Meta-Data Schema 정보
Meta-Data Schema
스프링 배치의 실행, 관리를 위한 목적으로 도메인의 정보를 정할 수 있는 스키마를 제공한다.
스프링 배치 라이브러리에서 DB 스키마를 제공한다.
해당 스키마는 모니터링 용도로만 사용되는 것이 아닌 실제 배치 작업이 실행되는 동안 사용되는 데이터들이 저장되는 장소이기 때문에 각 테이블에 어떤 데이터가 적재되는지 알고 사용하면 좋다.
DDL script 는 org.springframework.batch.core 라이브러리에 schema-*.sql 데이터베이스별로 있다.
적재되는 순서는 다음과 같다.
- BATCH_JOB_INSTANCE
- BATCH_JOB_EXECUTION
- BATCH_JOB_EXECUTION_PARAMS
- BATCH_JOB_EXECUTION_CONTEXT
- BATCH_STEP_EXECUTION
- BATCH_STEP_EXECUTION_CONTEXT
Job 관련 테이블
BATCH_JOB_INSTANCE
: Job이 실행될 때 JobInstance(실행되는 Job의 Name, Key에 대한 정보) 저장됨
CREATE TABLE BATCH_JOB_INSTANCE (
JOB_INSTANCE_ID BIGINT PRIMARY KEY ,
VERSION BIGINT,
JOB_NAME VARCHAR(100) NOT NULL ,
JOB_KEY VARCHAR(32) NOT NULL
);
- JOB_INSTANCE_ID : 고유하게 식별할 수 있는 기본 키
- VERSION : 업데이트 될 때마다 1씩 증가
- JOB_NAME : Job을 구성할 때 부여하는 Job 이름
- JOB_KEY : JOB_NAME과 JOB_PARAMETER 를 합쳐 해싱한 값
BATCH_JOB_EXECUTION
: Job이 실행 정보가 저장되며 Job의 생성, 시작, 종료 시각, 실행 상태, 메시지 등을 관리
CREATE TABLE BATCH_JOB_EXECUTION (
JOB_EXECUTION_ID BIGINT PRIMARY KEY ,
VERSION BIGINT,
JOB_INSTANCE_ID BIGINT NOT NULL,
CREATE_TIME TIMESTAMP NOT NULL,
START_TIME TIMESTAMP DEFAULT NULL,
END_TIME TIMESTAMP DEFAULT NULL,
STATUS VARCHAR(10),
EXIT_CODE VARCHAR(20),
EXIT_MESSAGE VARCHAR(2500),
LAST_UPDATED TIMESTAMP,
constraint JOB_INSTANCE_EXECUTION_FK foreign key (JOB_INSTANCE_ID)
references BATCH_JOB_INSTANCE(JOB_INSTANCE_ID)
) ;
- JOB_EXECUTION_ID : JobExecution을 고유하게 식별할 수 있는 기본키로 JOB_INSTANCE와 일대다 관계
- VERSION : 업데이트 될 때마다 1씩 증가
- JOB_INSTANCE_ID : BATCH_JOB_INSTANCE의 키
- CREATE_TIME : Excution이 생성된 시점
- START_TIME : Excution이 시작된 시점
- END_TIME : Excution이 종료된 시점
- STATUS : 실행 상태 [COMPLETED, FAILED, ...]
- EXIT_CODE : 실행 종료 코드 [COMPLETED, FAILED, ...]
- EXIT_MESSAGE : STATUS가 실패인 경우 실패 원인을 저장
- LAST_UPDATED : 마지막 Excution 시점 기록
BATCH_JOB_EXECUTION_PARAMS
: Job과 함께 실행되는 JobParameters 정보 저장
공식문서에는 아래의 sql문이 작성되어 있지만
CREATE TABLE BATCH_JOB_EXECUTION_PARAMS (
JOB_EXECUTION_ID BIGINT NOT NULL ,
PARAMETER_NAME VARCHAR(100) NOT NULL ,
PARAMETER_TYPE VARCHAR(100) NOT NULL ,
PARAMETER_VALUE VARCHAR(2500) ,
IDENTIFYING CHAR(1) NOT NULL ,
constraint JOB_EXEC_PARAMS_FK foreign key (JOB_EXECUTION_ID)
references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID)
);
- JOB_EXECUTION_ID : JobExecution 식별키 값, JOB_EXCUTION 과 일대다 관계
- PARAMETER_NAME : 파라미터 이름
- PARAMETER_TYPE : 파라미터 타입
- PARAMETER_VALUE : 파라미터 값
- IDENTIFYING : 식별여부 (true/false)
sql문에 작성된 것은 아래 내용이고 DB에도 다음 내용으로 생성되었다.
CREATE TABLE BATCH_JOB_EXECUTION_PARAMS (
JOB_EXECUTION_ID BIGINT NOT NULL ,
TYPE_CD VARCHAR(6) NOT NULL ,
KEY_NAME VARCHAR(100) NOT NULL ,
STRING_VAL VARCHAR(250) ,
DATE_VAL DATETIME(6) DEFAULT NULL ,
LONG_VAL BIGINT ,
DOUBLE_VAL DOUBLE PRECISION ,
IDENTIFYING CHAR(1) NOT NULL ,
constraint JOB_EXEC_PARAMS_FK foreign key (JOB_EXECUTION_ID)
references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID)
)
- JOB_EXECUTION_ID : JobExecution 식별키 값, JOB_EXCUTION 과 일대다 관계
- TYPE_CD : String, Long, Date, Double 등의 타입 정보
- KEY_NAME : 파라미터 키 값
- STRING_VAL : 파라미터 문자 값
- DATE_VAL : 파라미터 Date 값
- LONG_VAL : 파라미터 Long 값
- DOUBLE_VAL : 파라미터 Double 값
- IDENTIFYING : 식별여부 (true/false)
BATCH_JOB_EXECUTION_CONTEXT
: Job의 실행되는 동안 상태 정보, 공유 데이터를 직렬화(JSON)해서 저장
: Step 간의 데이터 공유가 가능함
CREATE TABLE BATCH_JOB_EXECUTION_CONTEXT (
JOB_EXECUTION_ID BIGINT PRIMARY KEY,
SHORT_CONTEXT VARCHAR(2500) NOT NULL,
SERIALIZED_CONTEXT CLOB,
constraint JOB_EXEC_CTX_FK foreign key (JOB_EXECUTION_ID)
references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID)
) ;
- JOB_EXECUTION_ID : JobExecution 식별키 값, JOB_EXCUTION 마다 생성
- SHORT_CONTEXT : Job 의 실행 상태 정보, 공유 데이터 등의 정보를 문자열로 저장
- SERIALIZED_CONTEXT : 직렬화된 전체 컨텍스트
STEP 관련 테이블
BATCH_STEP_EXECUTION
: Step 의 실행 정보가 저장되며 Step 의 생성, 시작, 종료 시각, 실행 상태, 메시지 등을 관리
CREATE TABLE BATCH_STEP_EXECUTION (
STEP_EXECUTION_ID BIGINT NOT NULL PRIMARY KEY ,
VERSION BIGINT NOT NULL,
STEP_NAME VARCHAR(100) NOT NULL,
JOB_EXECUTION_ID BIGINT NOT NULL,
CREATE_TIME TIMESTAMP NOT NULL,
START_TIME TIMESTAMP DEFAULT NULL ,
END_TIME TIMESTAMP DEFAULT NULL,
STATUS VARCHAR(10),
COMMIT_COUNT BIGINT ,
READ_COUNT BIGINT ,
FILTER_COUNT BIGINT ,
WRITE_COUNT BIGINT ,
READ_SKIP_COUNT BIGINT ,
WRITE_SKIP_COUNT BIGINT ,
PROCESS_SKIP_COUNT BIGINT ,
ROLLBACK_COUNT BIGINT ,
EXIT_CODE VARCHAR(20) ,
EXIT_MESSAGE VARCHAR(2500) ,
LAST_UPDATED TIMESTAMP,
constraint JOB_EXECUTION_STEP_FK foreign key (JOB_EXECUTION_ID)
references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID)
) ;
- STEP_EXECUTION_ID : Step의 실행 정보를 고유하게 식별할 수 있는 기본키
- VERSION : 업데이트 될 때마다 1씩 증가
- STEP_NAME : Step 을 구성할 때 부여하는 이름
- JOB_EXECUTION_ID : JobExecution 기본키, JOB_EXCUTION 과 일대다 관계
- CREATE_TIME : Excution이 생성된 시점
- START_TIME : Excution이 시작된 시점
- END_TIME : Excution이 종료된 시점
- STATUS : 실행 상태 [COMPLETED, FAILED, ...]
- COMMIT_COUNT : 트랜잭션당 커밋되는 수를 기록
- READ_COUNT : 실행 시점에 Read한 아이템수를 기록
- FILTER_COUNT : 실행 도중 필터링된 아이템수를 기록
- WRITE_COUNT : 실행 도중 저장되고 커밋된 아이템 수를 기록
- READ_SKIP_COUNT : 실행 도중 Read가 스킵된 아이템 수를 기록
- WRITE_SKIP_COUNT : 실행 도중 Write가 스킵된 아이템 수를 기록
- PROCESS_SKIP_COUNT : 실행 도중 Process가 스킵된 아이템 수를 기록
- ROLLBACK_COUNT : 실행 도중 Rollback이 일어난 수를 기록
- EXIT_CODE : 실행 종료 코드를 저장
- EXIT_MESSAGE : Status가 실패일 경우 실패 원인등의 내용 저장
- LAST_UPDATED : 마지막 실행 시점 기록
BATCH_STEP_EXECUTION_CONTEXT
: Step이 실행되는 동안 상태 정보, 공유 데이터를 직렬화(JSON)해서 저장
: Step 별로 저장되며 Step 간의 데이터 공유 불가능
CREATE TABLE BATCH_STEP_EXECUTION_CONTEXT (
STEP_EXECUTION_ID BIGINT PRIMARY KEY,
SHORT_CONTEXT VARCHAR(2500) NOT NULL,
SERIALIZED_CONTEXT CLOB,
constraint STEP_EXEC_CTX_FK foreign key (STEP_EXECUTION_ID)
references BATCH_STEP_EXECUTION(STEP_EXECUTION_ID)
) ;
- STEP_EXECUTION_ID : StepExcution 식별키 값, Step_execution마다 생성
- SHORT_CONTEXT : Step의 실행 상태 정보, 공유 데이터 등의 정보를 문자열로 저장
- SERIALIZED_CONTEXT : 직렬화된 전체 컨텍스트
공식 문서
https://docs.spring.io/spring-batch/docs/current/reference/html/schema-appendix.html