출처
- 해당 포스트는 정수원 강사님의 스프링 배치 - Spring Boot 기반으로 개발하는 Spring Batch 강의를 바탕으로 작성 됐습니다.
목차
- Spring Batch - 14. 배치 초기화 설정 (application.properties)
- Spring Batch - 13. JobLauncher
- Spring Batch - 12. JobRepository
- Spring Batch - 11. ExecutionContext
- Spring Batch - 10. StepContribution
- Spring Batch - 09. StepExecution 와 STEP_EXECUTION 테이블
- Spring Batch - 08. Step
- Spring Batch - 07. JobExecution 와 JOB_EXECUTION 테이블
- Spring Batch - 06. JobParameter 와 JOB_EXECUTION_PARAM 테이블
- Spring Batch - 05. JobInstance 와 JOB_INSTANCE 테이블
- Spring Batch - 04. JobLauncher
- Spring Batch - 03. Job
- Spring Batch - 02. Batch 에서 사용하는 Table
- Spring Batch - 01. @EnableBatchProcessing
Spring Batch 메타 데이터
- 스프링 배치의 실행 및 관리를 위한 목적으로 여러 도메인들(Job, Step, JobParameters 등) 의 정보들을 저장, 업데이트, 조회할 수 있는 스키마 를 제공한다.
- 과거, 현재의 실행에 대한 세세한 정보, 실행에 대한 성공과 실패 여부등을 일목요연하게 관리함으로서 배치운용에 있어 리스크 발생시 빠른 대처 가능
- DB 와 연동할 경우 필수적으로 메타 테이블이 생성 돼야 함
스키마 생성 설정
- 수동 생성 : 쿼리 복사 후 직접 실행
- 자동 생성 - spring.batch.jdbc.initialize-schema 설정
ALWAYS
- 스크립트 항상 실행
- RDBMS 설정이 돼 있을 경우 내장 DB 보다 우선적으로 실행
EMBEDDED
(기본 값)- 내장 DB 일 때만 실행되며 스키마가 자동 생성됨
NEBER
- 스크립트가 항상 실행 안된다.
- 내장 DB 일 경우 스크립트가 생성이 안되기 때문에 오류가 발생
- 운영에서는 수동으로 스크립트 생성 후 설정하는 것을 권장
# ALWAYS 로 설정 |
JOB 관련 테이블
Spring Batch 에서 Job 관련 메타데이터를 저장하기 위해 BATCH_JOB_INSTANCE, BATCH_JOB_EXECUTION, BATCH_JOB_EXECUTION_PARAMS, BATCH_JOB_EXECUTION_CONTEXT 4개의 테이블이 생성됩니다.
BATCH_JOB_INSTANCE
Job 이 실행될 때 생성되는 JobInstance 관련 정보 저장하는 테이블
- job_name 과 job_key 를 키로 하여 하나의 데이터가 저장된다.
- 동일한 job_name 과 job_key 로 중복 저장될 수 없다.
BATCH_JOB_EXECUTION
Job 의 실행 상태를 관리하는 JobExecution 정보를 저장한다.
- job 의 실행정보가 저장되며 Job 의 생성, 시작시간, 종료시간, 실행 상태, 메시지등을 저장하는 테이블
- BATCH_JOB_INSTANCE 테이블과 BATCH_JOB_EXECUTION 테이블은 1:N 관계를 가지고 있다.
BATCH_JOB_EXECUTION 테이블 컬럼
Column | 설명 | 특징 |
---|---|---|
JOB_EXECUTION_ID | BATCH_JOB_EXECUTION 의 기본 키 | |
VERSION | 업데이트 될때마다 1씩 증가 | |
JOB_INSTANCE_ID | JOB_INSTANCE 의 키 값을 저장한다. | |
CREATE_TIME | JOB_EXECUTION 이 생성된 시간을 저장한다. | |
START_TIME | JOB_EXECUTION 이 시작된 시간을 저장한다. | |
END_TIME | JOB_EXECUTION 의 종료 시간을 저장 | Job 실행 도중 중단 되면 값이 저장되지 않을 수 있다 (null) |
STATUS | JOB_EXECUTION 의 실행 상태를 저장한다. | COMPLETED, FAILED, STOPPED 등 |
EXIT_CODE | JOB_EXECUTION 의 실행 종료 코드를 저장한다 | COMPLETED, FAILED 등 |
EXIT_MESSAGE | STATUS 가 FAIL 일 경우 실패 원인 내용을 저장한다. | |
LAST_UPDATED | 마지막 실행 시점을 TIMESTAMP 로 저장한다. |
BATCH_JOB_EXECUTION_PARAMS
Job 과 함께 실행되는 JobParameter 정보를 저장한다.
- BATCH_JOB_EXECUTION 와 BATCH_JOB_EXECUTION_PARAMS 관계는 1:N 의 관계를 갖는다.
BATCH_JOB_EXECUTION_PARAMS 테이블 컬럼
Column | 설명 | 특징 |
---|---|---|
JOB_EXECUTION_ID | BATCH_JOB_EXECUTION 테이블 KEY 값을 저장 | 1:N 관계 |
TYPE_CD | String, Long, Double 등의 타입 정보를 저장 | |
KEY_NAME | Parameter Key 값 | |
STRING_VAL | Parameter 문자 값 | |
DATE_VAL | Parameter 날짜 값 | |
LONG_VAL | Parameter LONG 값 | |
DOUBLE_VAL | Parameter DOUBLE 값 | |
IDENTIFYING | 식별여부 (TRUE, FALSE) |
BATCH_JOB_EXECUTION_CONTEXT
Job 의 실행동안 여러가지 상태정보, 공유 데이터를 직렬화 해서 저장
- Step 간 서로 공유가 가능하다.
- BATCH_JOB_EXECUTION 와 BATCH_JOB_EXECUTION_CONTEXT 관계는 1:N 의 관계를 갖는다.
BATCH_JOB_EXECUTION_CONTEXT 테이블 컬럼
Column | 설명 | 특징 |
---|---|---|
JOB_EXECUTION_ID | BATCH_JOB_EXECUTION 테이블 KEY 값을 저장 | JOB_EXECUTION 마다 생성된다. |
SHORT_CONTEXT | JOB 의 실행 상태 정보, 공유 데이터등의 정보를 문자열로 저장 | |
SERIALIZED_CONTEXT | 직렬화(SERIALIZED) 된 전체 Context |
STEP 관련 테이블
Spring Batch 에서 Step 관련 메타데이터를 저장하기 위해 BATCH_STEP_EXECUTION, BATCH_STEP_EXECUTION_CONTEXT 2개의 테이블이 생성됩니다.
BATCH_STEP_EXECUTION
Step 의 실행정보가 저장되며 생성, 시작시간, 종료시간, 실행상태, 메시지 등을 저장하는 테이블
- BATCH_JOB_EXECUTION 테이블과 BATCH_STEP_EXECUTION 테이블은 1:N 관계를 갖는다.
BATCH_STEP_EXECUTION 테이블 컬럼
Column | 설명 | 특징 |
---|---|---|
STEP_EXECUTION_ID | Step 의 실행 정보를 고유하게 식별할 수 있는 Key | |
VERSION | Update 될때마다 1씩 증가 | |
STEP_NAME | Step 을 구성할 때 부여하는 Step 이름 | |
JOB_EXECUTION_ID | JobExecution 기본 키 | JobExecution 과는 1:N 관계 |
START_TIME | BATCH_JOB_EXECUTION 의 시작 시간 | |
END_TIME | BATCH_JOB_EXECUTION 의 종료 시간 | |
STATUS | BATCH_JOB_EXECUTION 의 상태 정보 | |
COMMIT_COUNT | 트랜잭션 당 Commit 되는 Count | |
READ_COUNT | 실행 시점에 READ 한 ITEM 수를 Count | |
FILTER_COUNT | 실행 시점에 FILTER 된 ITEM 수를 Count | |
WRITE_COUNT | 실행 시점에 저장하고 수정된 ITEM 수를 Count | |
READ_SKIP_COUNT | 실행 도중 READ 가 SKIP 된 ITEM 수를 Count | |
WRITE_SKIP_COUNT | 실행 도중 WRITE 가 SKIP 된 ITEM 수를 Count | |
PROCESS_SKIP_COUNT | 실행 도중 PROCESS 가 SKIP 된 ITEM 수를 Count | |
ROLLBACK_COUNT | 실행 도중 ROLLBACK 된 ITEM 수를 Count | |
EXIT_CODE | 실행 종료 코드를 저장한다. | |
EXIT_MESSAGE | STATUS 가 실패일 경우 실패 원인을 저장한다. | |
LAST_UPDATED | 마지막 실행 시점을 TIMESTAMP 로 저장한다. |
BATCH_STEP_EXECUTION_CONTEXT
Step의 실행동안 여러가지 상태 정보, 공유 데이터를 직렬화 해서 저장
- BATCH_JOB_EXECUTION_CONTEXT 와는 다르게 Step 별로 저장되며 Step 간 서로 공유 할 수 없음
BATCH_STEP_EXECUTION_CONTEXT 테이블 컬럼
Column | 설명 | 특징 |
---|---|---|
STEP_EXECUTION_ID | StepExecution 식별 키 | STEP_EXECUTION 마다 생성 |
SHORT_CONTEXT | Step 의 실행 상태 및 정보들을 문자열로 저장한다. | |
SERIALIZED_CONTEXT | 직렬화(SERIALIZED) 된 전체 Context |