Spring Batch에서 MySQL 사용하기
Spring Batch를 사용하기 위해서는 메타 데이터 테이블들이 필요하다😒
Spring Batch의 메타 데이터 테이블들에는 아래의 정보들이 들어가있다❗❗
지금까지 실행되었던 Job들의 목록
성공한 Job, 실패한 Job의 Batch Parameter
Job안에 있던 Step의 정보, 성공한 Step과 실패한 Step의 정보 등등...
Spring Batch를 운영하기 위해 많은 정보들이 메타 테이블에 나뉘어져 들어가게된다😁😁
위의 테이블들이 없으면 Spring Batch를 사용할 수 없다❗
나는 위의 테이블들을 추가한적이 없는데....❓🤔🤔
기본적으로 H2 DB를 사용했기 때문인데, H2 DB는 Spring Boot가 실행될때 자동으로 위의 테이블들을 추가해준다😮😮
MySQL을 사용하기 위해서는 위의 테이블들 직접 생성해주어야한다❗( Oracle과 같은 DB도 마찬가지 )
Intellij IDE로 이동해보자❗
[Ctrl]+[Shift]+N 단축키를 이용해 파일 검색창을 열고 schema라고 검색해보자👍
DBMS에 맞춰서 메타 데이터 테이블들이 정의 되어있다❗
schema-mysql-sql을 선택해서 들어가보면 이렇게 테이블을 생성할 수 있는 쿼리들이 들어가져 있다.
모두 복사해서 MySQL에서 실행하면된다❗❗
-- Autogenerated: do not edit this file
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;
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;
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;
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;
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;
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;
CREATE TABLE BATCH_STEP_EXECUTION_SEQ (
ID BIGINT NOT NULL,
UNIQUE_KEY CHAR(1) NOT NULL,
constraint UNIQUE_KEY_UN unique (UNIQUE_KEY)
) ENGINE=InnoDB;
INSERT INTO BATCH_STEP_EXECUTION_SEQ (ID, UNIQUE_KEY) select * from (select 0 as ID, '0' as UNIQUE_KEY) as tmp where not exists(select * from BATCH_STEP_EXECUTION_SEQ);
CREATE TABLE BATCH_JOB_EXECUTION_SEQ (
ID BIGINT NOT NULL,
UNIQUE_KEY CHAR(1) NOT NULL,
constraint UNIQUE_KEY_UN unique (UNIQUE_KEY)
) ENGINE=InnoDB;
INSERT INTO BATCH_JOB_EXECUTION_SEQ (ID, UNIQUE_KEY) select * from (select 0 as ID, '0' as UNIQUE_KEY) as tmp where not exists(select * from BATCH_JOB_EXECUTION_SEQ);
CREATE TABLE BATCH_JOB_SEQ (
ID BIGINT NOT NULL,
UNIQUE_KEY CHAR(1) NOT NULL,
constraint UNIQUE_KEY_UN unique (UNIQUE_KEY)
) ENGINE=InnoDB;
INSERT INTO BATCH_JOB_SEQ (ID, UNIQUE_KEY) select * from (select 0 as ID, '0' as UNIQUE_KEY) as tmp where not exists(select * from BATCH_JOB_SEQ);
실행전에 프로젝트와 MySQL을 연결하자👍
MySQL 설치는 되어있다고 가정을 하겠다😢 이것까지 다루기엔 너무......🤦♂️🤦♂️
jdbc-url: jdbc:mysql://localhost:3306/batchTest 의 경우 본인의 PC에 설치했다면 localhost를 적으면되고 외부 서버에 설치했다면 서버의 IP를 적어주면된다.
포트는 기본으로 3306포트이 설정되어있을 것이다❗
toyproject는 생성한 DB이름이다❗
DB에 메타 데이터 테이블을 저장하기 전에 배치를 다시 한번 실행시켜보면...😒
BATCH_JOB_INSTANCE가 존재하지 않아서 에러가난다❗
그럼 메타 데이터 테이블들 생성하고 다시 한번 실행시켜 보자❗❗
짜잔❗ 아주 잘 실행 되었다❗
다음엔 메타 데이터 테이블들에 대해 간단히 알아보자❗❗😊
출처
https://jojoldu.tistory.com/324?category=902551
'Spring Batch' 카테고리의 다른 글
Spring Batch 개발기 ( 5. 영화진흥위원회 API ) (0) | 2021.09.09 |
---|---|
Spring Batch 개발기 ( 4. MetaData테이블 ) (1) | 2021.07.16 |
Spring Batch 개발기 ( 2. Job&Step?? ) (0) | 2021.06.23 |
Spring Batch 개발기 ( 1. Spring Batch란?? ) (0) | 2021.06.23 |
Spring Batch 개발기 (0) | 2021.06.23 |