천천히 알아보는 코딩공부

[SpringBatch] DB 스키마 설명 및 세팅 (2) 본문

Java/SpringBatch

[SpringBatch] DB 스키마 설명 및 세팅 (2)

고기고기물고기 2023. 4. 20. 18:03

Step 관련테이블

- BATCH_STEP_EXECUTION

  • Step의 실행정보가 저장되며 생성, 시작, 종료 시간, 실행상태, 메시지 등을 관리
CREATE TABLE BATCH_STEP_EXECUTION  (
    STEP_EXECUTION_ID BIGINT  PRIMARY KEY ,
    VERSION BIGINT NOT NULL,
    STEP_NAME VARCHAR(100) NOT NULL,
    JOB_EXECUTION_ID BIGINT NOT NULL,
    START_TIME TIMESTAMP NOT 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 DB에 record가 터치(update)될 때마다 누적됩니다.
STEP_NAME StepBuildFactory에서 Step을 빌드할 당시 get메서드를 사용하여 해당 Step의 이름을 부여하였습니다. 
그러니 반드시 NULL이 올 수 없겠죠. 바로 그 값(이름)을 기록합니다.
JOB_EXECUTION_ID Job이 실행될 때마다 그 Job에 정의되어 있는 Step이 실행되고 그 Step의 실행정보가 이 테이블에 저장되겠죠. StepExecution JobExecution안에 귀속됩니다.
즉,  
StepExecution JobExecution안에 귀속됩니다. 그러니 StepExecution에 대한 JobExecution의 식별키 정보를 기록하고 있습니다.
START_TIME 실행(Execution)이 시작된 시점을 TimeStamp 형식으로 기록합니다.
END_TIME 실행이 종료된 시점을 TimeStamp으로 기록합니다.
여기서 말하는 '종료'는 '성공' 또는 '실패'와 상관없이 순수히 끝난 시점을 의미합니다. 
실행 도중 일부유형의 오류가 발생했거나 프레임워크 내부에서 값을 저장하기도 전에 실패되었을 경우 값이 비어 있을 수 있습니다.
STATUS 실행의 상태를 COMPLETED, STARTED, ETC 와 같은 미리 정의된 Enumeration값으로 기록합니다.
COMMIT_COUNT 트랜잭션 당 커밋되는 수를 기록합니다.
우리는 Chunk라는 것을 이용해 1번의 트랙잭션에 처리되는 커밋수를 정의한 기억이 있습니다.
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 실행도중 Process가 스킵(Skip)된 Item 수를 기록합니다.
ROLLBACK_COUNT 실행도중 rollback이 일어난 수를 기록합니다. 프로시저복구를 생략하고 재시도된 롤백건도 포함합니다.
EXIT_CODE 실행 종료코드를 기록합니다.
EXIT_MESSAGE Status가 실패(Fail)일 경우 실패한 원인에 대하여 추적이 가능한 범위내에서 기술하여 문자열형태로 기록합니다.
LAST_UPDATED 실행중에 마지막으로 영속(persisted)에 놓인 시점을 TimeStamp 형식으로 기록합니다.

 

- 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 컨텍스트가 속하는 StepExecution을 나타내는 외래 키.
주어진 실행과 관련된 행이 두 개 이상있을 수 있습니다.
SHORT_CONTEXT SERIALIZED_CONTEXT의 버전을 나타내는 문자열
SERIALIZED_CONTEXT 직렬화(serialized)된 전체 컨테스트

 

 

'Java > SpringBatch' 카테고리의 다른 글

[SpringBatch] Chunk 기반 실행  (0) 2023.09.14
[SpringBatch] DB 스키마 설명 및 세팅  (0) 2023.04.20
[SpringBatch] 스프링 배치 실행 순서  (0) 2023.04.18
Comments