I. 스프링 배치 메타 데이터
· 스프링 배치의 실행 및 관리를 위한 목적으로 여러 도메인들(Job, Step, JobParameters...)의 정보들을 저장 업데이터, 조회할 수 있는 스키마 구성
· 과거.. 현재의 실행에 대한 세세한 정보, 실행에 대한 성공과 실패 여부 등을 관리한다.
- 배치 운용에 있어 리스크 발생시 빠른 대처 가능
· DB 연동할 경우 필수적으로 메타 테이블이 생성되어야 함.
II. 스키마 생성 설정
· 수동 생성 -> 쿼리 복사 후 직접 실행
· 자동 생성 -> spring.batch.jdbc.initialize-schema 설정
· ALWAYS
- 스크립트 항상 실행
- RDBMS 설정이 되어 있을 경우 내장 DB보다 우선적으로 실행
· EMBEDDED
- 내장 DB일 때만 실행되며 스키마가 자동 생성됨, 기본값
· NEVER
- 스크립트 항상 실행안함.
- 내장 DB 일경우 스크립트가 생성이 안되기 때문에 오류 발생.
- 운영에서 수동으로 스크립트 생성 후 설정하는 것을 권장.

III. Mysql DB 셋업
1. MySQL 서버, WorkBench 설치
https://code-angie.tistory.com/158
[MySQL] MySQL 설치하기 (윈도우 / windows)
MySQLMySQL은 가장 많이 사용되는 데이터베이스 중 하나이다.무료이기에 간단히 설치해 바로 사용할 수 있다. 윈도우와 리눅스 등 다양한 운영체제에서 사용 가능해 확장성이 뛰어나다. 표준 SQL
code-angie.tistory.com
2. MySQL WorkBench 실행


새로운 사용자(User) 생성
- 좌측 상단의 메뉴 바에서 Server > Users and Privileges 선택
또는 Navigator 패널에서 Management > Users and Privileges 클릭 - 상단 탭에서 "Users and Privileges" 창이 열리면, 좌측에서 "Add Account" 클릭
- 사용자 정보 입력:
- Login Name: 새로 만들 사용자명 (예: dev_user)
- Limit to Hosts Matching: 기본값 % (모든 IP에서 접속 허용)
- Authentication Type: 기본값 그대로 (MySQL Native Authentication)
- Password / Confirm Password: 원하는 비밀번호 입력


권한(Privileges) 설정
- 상단의 Administrative Roles 탭으로 이동
또는 Schema Privileges 탭으로 이동하여 특정 데이터베이스에 대한 권한 설정 가능 - 빠르게 root처럼 전체 권한을 주고 싶다면:
- Administrative Roles에서 DBA 체크 (모든 권한 포함)
- 특정 DB만 접근하게 하고 싶다면:
- Schema Privileges > Add Entry 클릭
- 특정 스키마 선택 또는 "All Schema"
- 필요한 권한 선택 (예: SELECT, INSERT, UPDATE 등)

3. MySQL Database 추가
CREATE DATABASE springbatch;
show databases;

4. MySQL Connections 정보 추가



IIII. DB 스키마 생성


@ 복사할 DML 스크립트 긁어오기.


@ MySQL DB 기준으로 생성합니다.
-- 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 DB를 사용하기 위한 pom.xml 의존성 추가.
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
@application.yml 속성에
# MYSQL 설정
spring:
config:
activate:
on-profile: mysql
datasource:
hikari:
jdbc-url: jdbc:mysql://localhost:3306/springbatch?useUnicode=true@characterEncoding=utf8
username: seulgae
password: 12345678
driver-class-name: com.mysql.cj.jdbc.Driver
batch:
jdbc:
initialize-schema: always
해당 정보 추가.
'Java & Spring > SpringBatch' 카테고리의 다른 글
| 스프링 배치 도메인 이해 - Job (1) | 2025.04.21 |
|---|---|
| Spring Batch 시작 - DB 스키마 생성(2) (0) | 2025.04.20 |
| SpringBatch Hello Spring Batch 시작하기 (0) | 2025.04.20 |
| Spring Batch 개요 (0) | 2025.04.19 |