본문 바로가기

강의/스프링배치

스프링 배치 시작 - DB 스키마 생성 및 이해 (1)

1. 기본 이해


1-1. JobExecution 클래스

Job이 실행되는 동안 생성이 된다.

job의 실행 정보, 상태 정보를 담고있다.

1-2 StepExecution 클래스

Step도 실행되는 동안 StepExecution이 생성된다.

step의 실행 정보, 상태 정보

1-3 실행 정보, 상태 정보 저장

저장되어 있는 table을 스프링 배치에서 기본적으로 제공하고 있다.

스크립트를 가지고 적용할 수 있다.

스크립트를 가지고 테이블을 생성해서 실행정보, 상태정보를 저장하면 된다.

 

실행정보 상태정보를 메타데이터라고 한다.

2. DB


job이 몇시에 실행이 되었으며,

최종 종료된 상태는 어떤 상태인지

실행정보와 상태정보를 database에 저장하는 단계가 있다.

2-1 db 저장의 이점

그래야 우리가 job이 끝나고 향후에

1. job에 대한 통계

2. 정산 작업

3. 오류 또는 예외가 발생했을 때 어떤 오류와 예외가 발생했는지를 저장된 정보를 기반으로 확인할 수 있다.

4. 과거, 현재의 실행에 대한 세세한 정보, 실행에 대한 성공과 실패 여부 등을 일목요연하게 관리함으로서 배치운용에 있어 리스크 발생시 빠른 대처 가능

2-2. DB 스키마 제공

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

 - 파일 위치 : external libraries -> srping-batch-core -> /org/springframework/batch/core/schema-*.sql

 - 여기에 각각의 데이터 베이스 종류별로 테이블을 생성할 수 있는 스크립트가 존재한다.

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

2-3. 스키마 생성  설정

수동 생성과 자동 생성하는 두가지의 방법이 있다.

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

 - 자동 생성 - spring.batch.jdbc.initialize-schema 설정 (application.properties 또는 application.yml에 설정해야함)

    - ALWAYS

          - 스크립트가 항상 실행

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

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

    - NEVER

          - 스크립트 항상 실행 안함

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

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

 

https://docs.spring.io/spring-batch/docs/3.0.x/reference/html/metaDataSchema.html

3. 수동으로 스키마 생성 과정 살펴보기


3-1. 수동 생성 쿼리 확인

위에서 확인한 것과 같이 아래 위치에서 테이블 생성 쿼리를 확인할 수 있다.

external libraries -> srping-batch-core -> /org/springframework/batch/core/schema-*.sql

 

 

쿼리 확인 

 

3-2. mysql 설치 -> schema 이름 설정

3-3. intellij에서 db 연동

3-4. intellij 에서 query 날리는 방법

4. Application properties 설정


기본 active profiles 설정은 local

 

spring:
  profiles:
    active: local

---
spring:
  config:
    activate:
      on-profile: local
  datasource:
    hikari:
      jdbc-url: jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
      username: sa
      password:
      driver-class-name: org.h2.Driver
  batch:
    jdbc:
      initialize-schema: embedded


---
spring:
  config:
    activate:
      on-profile: mysql
  datasource:
    hikari:
      jdbc-url: jdbc:mysql://localhost:3306/springbatch?useUnicode=true&characterEncoding=utf8
      username: root
      password: 1111
      driver-class-name: com.mysql.cj.jdbc.Driver
  batch:
    jdbc:
      initialize-schema: never

5. intellij active profiles 변경

6. DB 스키마에 대한 이해


job key는 job parameter를 hash 값으로 변경한 값이다.