반응형
본 내용은 온라인 강의 사이트 인프런의 정수원 님의 강의 내용이 포함되어 있습니다.
스프링 배치 - Spring Boot 기반으로 개발하는 Spring Batch
스프링 배치 DB 스키마
Job 관련 테이블
batch_job_instance
Job이 실행될 때 JobInstance 정보가 저당되며 job_name과 job_key를 키로 하여 하나의 데이터가 저장된다. 동일한 job_name과 job_key로 중복 저장될 수 없다.
CREATE TABLE BATCH_JOB_INSTANCE (
JOB_INSTANCE_ID BIGINT NOT NULL PRIMARY KEY ,
VERSION BIGINT ,
JOB_NAME VARCHAR(100) NOT NULL,
JOB_KEY VARCHAR(32) NOT NULL,
constraint JOB_INST_UN unique (JOB_NAME, JOB_KEY)
) ENGINE=InnoDB;
- JOB_INSTANCE_ID : Job 인스턴스를 식별할 수 있는 기본 키(id)
- VERSION : 업데이트될 때마다 1씩 증가
- JOB_NAME : Job을 구성할 때 부여하는 Job 이름
- JOB_KEY : job_name과 jobParameter를 합쳐 해싱한 값을 저장
batch_job_execution
job의 실행정보가 저장되며 Job의 생성, 시작, 종료 시간, 실행 상태, 메시지 등을 관리한다. batch_job_instance 테이블과 일대다 관계다.
CREATE TABLE BATCH_JOB_EXECUTION (
JOB_EXECUTION_ID BIGINT NOT NULL PRIMARY KEY ,
VERSION BIGINT ,
JOB_INSTANCE_ID BIGINT NOT NULL,
CREATE_TIME DATETIME(6) NOT NULL,
START_TIME DATETIME(6) DEFAULT NULL ,
END_TIME DATETIME(6) DEFAULT NULL ,
STATUS VARCHAR(10) ,
EXIT_CODE VARCHAR(2500) ,
EXIT_MESSAGE VARCHAR(2500) ,
LAST_UPDATED DATETIME(6),
JOB_CONFIGURATION_LOCATION VARCHAR(2500) NULL,
constraint JOB_INST_EXEC_FK foreign key (JOB_INSTANCE_ID)
references BATCH_JOB_INSTANCE(JOB_INSTANCE_ID)
) ENGINE=InnoDB;
- JOB_EXECUTION_ID : JobExceution을 고유하게 식별할 수 있는 기본 키(id)
- VERSION : 업데이트될 때마다 1씩 증가
- JOB_INSTANCE_ID : job_instance의 키 값을 저장
- CREATE_TIME : JobExcution이 생성된 시점을 TimeStamp 형식으로 저장
- START_TIME : JobExcution이 시작된 시점을 TimeStamp 형식으로 저장
- END_TIME : JobExcution이 종료된 시점을 TimeStamp 형식으로 저장, Job의 실행 도중 예외 발생 시에는 저장하지 않음
- STATUS : JobExcution의 실행 상태를 저장(COMPLETED, FAILED, STOPPED, …)
- EXIT_CODE : JobExcution의 실행 종료코드를 저장(COMPLETED, FAILED, …)
- EXIT_MESSAGE : JobExcution의 종료 메시지를 저장, Status가 FAILED일 경우 실패에 대한 원인 등의 내용을 저장
- LAST_UPDATED : JobExcution의 마지막 실행 시점을 TimeStamp 형식으로 저장
batch_job_execution_params
Job과 함께 실행되는 JobParameter 정보를 저장한다. batch_job_execution 테이블과 일대다 관계다.
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)
) ENGINE=InnoDB;
- JOB_EXECUTION_ID : 실행된 JobExcution의 식별 키(id)
- TYPE_CD : JobPameter의 데이터 타입 코드(STRING, LONG, DATE, DOUBLE)
- KEY_NAME : JobPameter의 이름
- STRING_VAL : JobPameter의 String 값
- DATE_VAL : JobPameter의 Date 값
- LONG_VAL : JobPameter의 Long 값
- DOUBLE_VAL : JobPameter의 Double 값
- IDENTIFYING : 식별여부(TRUE, FALSE)
batch_job_execution_context
Job의 실행동안 여러 가지 상태정보, 공유 데이터를 Josn 형식으로 직렬화하여 저장한다. Step 간의 서로 공유가 가능하다.
CREATE TABLE BATCH_JOB_EXECUTION_CONTEXT (
JOB_EXECUTION_ID BIGINT NOT NULL PRIMARY KEY,
SHORT_CONTEXT VARCHAR(2500) NOT NULL,
SERIALIZED_CONTEXT TEXT ,
constraint JOB_EXEC_CTX_FK foreign key (JOB_EXECUTION_ID)
references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID)
) ENGINE=InnoDB;
- JOB_EXECUTION_ID : 실행된 JobExecution의 키 값(id), 각 JobExecution 마다 생성
- SHORT_CONTEXT : 문자열로 저장된 JobExecutionContext 정보(Job의 실행 상태, 공유 데이터 등)
- SERIALIZED_CONTEXT : 직렬화하여 저장된 JobExecutionContext 정보
Step 관련 테이블
batch_step_execution
Step의 실행정보가 저장되며 생성, 시작, 종료 시간, 실행 상태, 메시지 등을 관리한다. batch_job_excution 테이블과 일대다 관계다.
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,
START_TIME DATETIME(6) NOT NULL ,
END_TIME DATETIME(6) 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(2500) ,
EXIT_MESSAGE VARCHAR(2500) ,
LAST_UPDATED DATETIME(6),
constraint JOB_EXEC_STEP_FK foreign key (JOB_EXECUTION_ID)
references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID)
) ENGINE=InnoDB;
- STEP_EXECUTION_ID : 실행된 StepExecution을 식별할 수 있는 기본 키(id)
- VERSION : 업데이트될 때마다 1씩 증가
- STEP_NAME : 실행된 StepExecution의 Step 이름
- JOB_EXECUTION_ID : 실행된 JobExecution의 기본키(id)
- START_TIME : StepExecution이 시작된 시점을 TimeStamp 형식으로 저장
- END_TIME : StepExecution이 종료된 시점을 TimeStamp 형식으로 저장, StepExcution 실행 중 예외가 발생하면 저장하지 않음
- STATUS : StepExecution의 상태 (COMPLETED, FAILED, STOPPED, …)
- COMMIT_COUNT : StepExecution 실행 중 트랜잭션 당 커밋되는 수 저장
- READ_COUNT : StepExecution 실행 중 read한 item 수 저장
- FILTER_COUNT : StepExecution 실행 중 필터링된 item 수 저장
- WRITE_COUNT : StepExecution 실행 중 저장되고 커밋된 item 수 저장
- READ_SKIP_COUNT : StepExecution 실행 중 read가 skip된 item 수 저장
- WRITE_SKIP_COUNT : StepExecution 실행 중 write가 skip된 item 수 저장
- PROCESS_SKIP_COUNT : StepExecution 실행 중 Process가 skip된 item 수 저장
- ROLLBACK_COUNT : StepExecution 실행 중 롤백(rollback)이 일어난 수 저장
- EXIT_CODE : StepExecution의 종료 코드 (COMPLETED, FAILED, …)
- EXIT_MESSAGE : StepExecution의 종료 메시지를 저장, Status가 FAILED일 경우 실패에 대한 원인 등의 내용을 저장
- LAST_UPDATED : StepExecution의 마지막 실행 시점을 TimeStamp 형식으로 저장
batch_step_execution_context
Step의 실행동안 여러가지 상태 정보, 공유 데이터를 Josn 형식으로 직렬화하여 저장한다. Step 별로 저장되며 Step 간의 서로 공유할 수 없다.
CREATE TABLE BATCH_STEP_EXECUTION_CONTEXT (
STEP_EXECUTION_ID BIGINT NOT NULL PRIMARY KEY,
SHORT_CONTEXT VARCHAR(2500) NOT NULL,
SERIALIZED_CONTEXT TEXT ,
constraint STEP_EXEC_CTX_FK foreign key (STEP_EXECUTION_ID)
references BATCH_STEP_EXECUTION(STEP_EXECUTION_ID)
) ENGINE=InnoDB;
- STEP_EXECUTION_ID : 실행된 StepExecution의 키 값(id), 각 StepExecution 마다 생성
- SHORT_CONTEXT : 문자열로 저장된 StepExecutionContext 정보(Step의 실행 상태, 공유 데이터 등)
- SERIALIZED_CONTEXT : 직렬화하여 저장된 StepExecutionContext 정보
반응형
'프레임워크(Framework) > Spring' 카테고리의 다른 글
[Spring Batch] 스프링 배치 JobInstance 이해하기 - Spring boot 2.x (0) | 2023.06.25 |
---|---|
[Spring Batch] 스프링 배치 Job 이해하기 - Spring boot 2.x (0) | 2023.06.23 |
[Spring Batch] 스프링 배치 간단한 Job 구현하고 실행하기 - Spring boot 2.x (0) | 2023.06.15 |
[Spring Batch] 스프링 배치 프로젝트 구성 및 환경 설정 - Spring boot 2.x (0) | 2023.06.12 |
[Spring Boot] 스프링 부트 웹 서버 톰캣(Tomcat)에서 제티(Jetty)로 변경하기 (0) | 2023.05.19 |