Lined Notebook

스프링 배치 DB 스키마

by HeshAlgo

스프링 배치는 실행 및 관리의 목적으로 여러 도메인들의 정보들을 저장, 업데이트, 조회할 수 있는 스키마를 제공해줍니다.

그렇기 때문에 DB와 연동할 경우 필수적으로 메타 테이블이 생성되어야 하기 때문에 필수적으로 스키마를 생성해줘야 합니다.

해당 DB 스키마는 스크립트 형태로 제공되기 때문에 사용하시는 데이터베이스에 맞는 것을 찾아 생성해주면 됩니다.

 

파일 위치 : /org/springframework/batch/core/schema-*.sql

 

인텔리제이를 사용할 경우 shift 두 번 클릭해 'schema-(사용하는 DB)'로 검색하시면 원하는 DDL 스크립트를 쉽게 찾으실 수 있습니다. 

저 같은 경우 mysql을 사용하기 때문에 schema-mysql.sql 스크립트를 이용해 스키마를 생성해줬습니다.

 

1. 스프링 배치 메타 데이터 스키마

 

2. Job 관련 테이블

1) BATCH_JOB_INSTANCE

- Job이 실행될 때 JobInstance 정보가 저장되며 job_name, job_key를 키로 하여 하나의 데이터가 저장되기 때문에 중복되는 Job을 저장할 수 없습니다.

Column Name Column Explanation
JOB_INSTANCE_ID Job 인스턴스를 식별하는 고유 ID. getId 메서드를 호출하여 얻을 수 있다.
VERSION 업데이트 될 때마다 1씩 증가
JOB_NAME Job을 구성할 때 부여하는 Job의 이름
JOB_KEY job_name과 job_parameter를 합쳐 해싱한 값을 저장

 

2) BATCH_JOB_EXECUTION

- 배치 Job의 실행 정보가 담기며 Jobd의 생성, 시작, 종료 시간, 실행 상태 등의 정보를 저장합니다.

Column Name Column Explanation
JOB_EXECUTION_ID JobExecution을 고유하게 식별할수 있는 기본키, JOB_INSTANCE와 일대 다 관계. getId 메서드를 호출하여 얻을 수 있다.
VERSION 업데이트 될 때마다 1씩 증가
JOB_INSTANCE_ID BATCH_JOB_INSTANCE 테이블의 외래 키
CREATE_TIME 실행(Execution)이 생성된 시점을 TimeStamp 형식으로 기록
START_TIME 실행(Execution)이 시작된 시점을 TimeStamp 형식으로 기록
END_TIME 성공 또는 실패에 관계 없이 실행(Execution)이 완료된 시점을 TimeStamp 형식으로 기록 
단, Job 실행 도중 오류가 발생해서 Job이 중단된 경우 값이 저장되지 않을 수 있음
STATUS 실행 상태(BatchStatus)를 저장(COMPLETED, STARTED...). BatchStatus의 Enumeration
EXIT_CODE 실행 종료(ExitStatus) 코드를 저장(COMPLETED, STARTED...)
EXIT_MESSAGE Job이 종료된 방법에 대한 설명을 나타냄. Status가 실패일 경우 실패 원인 등의 내용을 저장
LAST_UPDATED 마지막 실행(Execution) 시점을 TimeStamp 형식으로 기록

 

3) BATCH_JOB_EXECUTION_PARAMS

- Job과 함께 실행되는 JobParameter 정보를 저장합니다.

Column Name Column Explanation
JOB_EXECUTION_ID JobExecution 식별 키. JOB_EXECUTION과는 일대다 관계.
그렇기 때문에 하나의 JOB_EXECUTION_ID에는 여러개의 파라미터 값을 가질수 있음
TYPE_CD 저장된 값의 타입 정보를 저장(STRING, LONG, DATE...). 유형을 알아야 하기 때문에 null 일 수 없음
KEY_NAME 파라미터 키
STRING_VAL 타입이 String일 경우 저장되는 값
DATE_VAL 타입이 Date일 경우 저장되는 값
LONG_VAL 타입이 Long일 경우 저장되는 값
DOUBLE_VAL 타입이 Double일 경우 저장되는 값
IDENTIFTING 배치 잡 파라미터의 값을 식별 여부를 저장 (TRUE, FALSE)

 

4) BATCH_JOB_EXECUTION_CONTEXT

- Job의 실행 동안 여러 가지 상태 정보, 공유 데이터를 직렬화(Json 형식) 해서 저장합니다.

- ExecutionContext 객체가 가지고 있는 데이터를 통해 Step 간 서로 데이터 공유가 가능합니다.

Column Name Column Explanation
STEP_EXECUTION_ID JobExecution 식별 키. JOB_EXECUTION 마다 각 생성
SHORT_CONTEXT Job의 실행 상태 정보, 공유 데이터 등의 정보를 문자열로 저장
SERIALIZED_CONTEXT 직렬화된 전체 컨텍스트

 

3. Step 관련 테이블

1) BATCH_STEP_EXECUTION

- Step의 실행 정보가 저장되며 생성, 시작, 종료 시간 등을 관리합니다.

Column Name Column Explanation
STEP_EXECUTION_ID Step의 실행벙보를 고유하게 식별할 수 있는 기본 키
VERSION 업데이트 될 때마다 1씩 증가
STEP_NAME Step을 구성할 때 부여하는 Step 이름
JOB_EXECUTION_ID BATCH_JOB_EXECUTION 테이블의 외래키. JobExecution과는 일대다 관계
START_TIME 실행이 시작된 시간을 나타내는 타임스탬프
END_TIME 성공, 실패에 상관없이 완료된 시간을 나타내는 타임스탬프
STATUS 실행 상태(BatchStatus)를 저장(COMPLETED, STARTED...). BatchStatus의 Enumeration
COMMIT_COUNT 트랜잭션 당 커밋되는 수를 기록
READ_COUNT 실행 시점에 Read한 item 수를 기록
FILTER_COUNT 실행 도중 필터링 된 item 수를 기록
WRITE_COUNT 실팽 도중 저장되고 커밋된 item 수를 기록
READ_SKIP_COUNT 실행 도중 Read가 Skip된 item 수를 기록
WRITE_SKIP_COUNT 실행 도중 Write가 Skip된 item 수를 기록
PROCESS_SKIP_COUNT 실행 도중 Prcess가 Skip된 itme 수를 기록
ROLLBACK_COUNT 실행 도중 Rollback이 일어난 수를 기록
EXIT_CODE 실행 종료(ExitStatus) 코드를 저장(COMPLETED, STARTED...)
EXIT_MESSAGE Step이 종료된 방법에 대한 설명을 나타냄. Status가 실패일 경우 실패 원인 등의 내용을 저장
LAST_UPDATED 마지막 실행(Execution) 시점을 타임스탬프 형식으로 기록

 

2) BATCH_STEP_EXECUTION_CONTEXT

- Step의 실행 동안 여러 가지 상태 정보, 공유 데이터를 직렬화(Json 형식) 해서 저장합니다.

- Step 별로 저장되며 Step 간 서로 데이터 공유가 불가능합니다.

Column Name Column Explanation
STEP_EXECUTION_ID StepExecution 식별 키, STEP_EXECUTION 마다 각 생성
SHORT_CONTEXT STEP의 실행 상태 정보, 공유 데이터 등의 정보를 문자열로 저장
SERIALIZED_CONTEXT 직렬화된 전체 컨텍스트

 

참고 문헌 😶

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

'Spring Batch' 카테고리의 다른 글

Spring Batch Step  (0) 2023.05.22
Spring Batch Job  (0) 2023.05.22
Spring Batch Introduction  (0) 2023.05.07

블로그의 정보

꾸준히 공부하는 개발 노트

HeshAlgo

활동하기