본문 바로가기

Java & Spring/SpringBatch

Spring Batch 시작 - DB 스키마 생성(1)

728x90

I. 스프링 배치 메타 데이터

· 스프링 배치의 실행 및 관리를 위한 목적으로 여러 도메인들(Job, Step, JobParameters...)의 정보들을 저장 업데이터, 조회할 수 있는 스키마 구성

· 과거.. 현재의 실행에 대한 세세한 정보, 실행에 대한 성공과 실패 여부 등을 관리한다. 

- 배치 운용에 있어 리스크 발생시 빠른 대처 가능

· DB 연동할 경우 필수적으로 메타 테이블이 생성되어야 함.

 

II. 스키마 생성 설정

· 수동 생성 -> 쿼리 복사 후 직접 실행

· 자동 생성 -> spring.batch.jdbc.initialize-schema 설정

· ALWAYS

- 스크립트 항상 실행

- RDBMS 설정이 되어 있을 경우 내장 DB보다 우선적으로 실행

 

· EMBEDDED

- 내장 DB일 때만 실행되며 스키마가 자동 생성됨, 기본값

 

· NEVER

- 스크립트 항상 실행안함.

- 내장 DB 일경우 스크립트가 생성이 안되기 때문에 오류 발생.

- 운영에서 수동으로 스크립트 생성 후 설정하는 것을 권장.

 

application.yml

 

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) 생성

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

 

왼쪽 하단 Add Account 클릭

 

 

권한설정

 권한(Privileges) 설정

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

Apply 클릭

 

 

3. MySQL Database 추가

 

CREATE DATABASE springbatch;
show databases;

 

조회화면

 

 

4. MySQL Connections 정보 추가

+클릭
서버 생성 완료.

 

IIII. DB 스키마 생성

인텔리제이 DB 접속 정보 추가

 

 

접속정보 입력

 

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

sql 스크립트 위치
각 DB 별 스키마 생성 스크립트.

 

@ 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);

 

@ 실행 ㄱㄱㄱㄱ

붙여넣기.
table 생성 완료.

@ 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

해당 정보 추가.

 

728x90