SpringBatch에서 Meta Data Table 변경하기

hoyong.eom·2024년 5월 13일

스프링배치

목록 보기
11/12
post-thumbnail

SpringBatch

스프링 배치를 사용하다면 보면 여러개의 배치 애플리케이션을 만드는 경우가 있을 수 있다.
예를 들어 스프링배치 이용한 애플리케이션을 2개 이상 사용해야하는 경우?

오늘은 스프링배치에서 Meta Data Table의 이름을 변경하기 위한 방법을 정리해보자.

1. 변경된 메타 테이블을 사용하기

스프링 배치에서는 기본적으로 메타 테이블의 이름은 BATCH 라는 Prefix로 시작한다.
그리고 별도의 설정을 하지 않는다면, BATCH
라는 Prefix로 되어 있는 테이블을 메타 테이블로 사용한다.
하지만, 스프링 배치에서는 BATCH_가 아닌 다른 prefix를 사용하는 테이블을 메타 테이블로 사용도록 변경할 수 있다.

application.yml에 아래와 같이 메타 테이블의 prefix 값을 지정해줄 수 있다.

// application.yml
spring:
  batch:
    job:
      enabled: false
    jdbc:
      initialize-schema: always
      table-prefix: CUSTOM_

application.yml파일을 보면 spring.batch.jdbc.table-prefix:CUSTOM_ 으로 변경한걸 확인할 수 있다.

스프링배치 공식 docs를 보면 application.yml 뿐만 아니라 bean 설정을 통해서도 변경할 수 있는것으로 보인다.
참고: https://docs.spring.io/spring-batch/reference/job/advanced-meta-data.html

2. 메타 테이블 이름 변경하기

1번에서 사용할 메타 테이블 이름을 변경했다면, 메타 테이블을 생성해줘야한다.
하지만 대부분의 예제들을 찾아보면 table-prefix만 변경하고 실제 메타 테이블을 생성하진 않는다.
그러면 에러가 발생한다!

왜냐하면 table-prefix는 말그대로 사용할 메타 테이블의 이름을 지정해준것이고, CUSTOM_으로 시작하는 메타 테이블이 존재하지 않으면 에러가 발생할것이다.

기본적으로 application.yml에서는 아래의 속성을 통해서 메타 테이블을 기본적으로 생성해준다.

spring:
  batch:
    job:
      enabled: false
    jdbc:
      initialize-schema: always

initialize-schema 설명(참고 : https://docs.spring.io/spring-boot/docs/2.1.x/reference/html/howto-database-initialization.html)

하지만, 기본적으로 생성되는 메타 테이블의 이름은 고정되어 있다.
참고)https://github.com/spring-projects/spring-batch/blob/main/spring-batch-core/src/main/resources/org/springframework/batch/core/schema-postgresql.sql

schema-postgresql.sql 파일을 보면 대강 아래와 같다.

CREATE TABLE BATCH_JOB_EXECUTION  (
	JOB_EXECUTION_ID BIGINT  NOT NULL PRIMARY KEY ,
	VERSION BIGINT  ,
	JOB_INSTANCE_ID BIGINT NOT NULL,
	CREATE_TIME TIMESTAMP NOT NULL,
	START_TIME TIMESTAMP DEFAULT NULL ,
	END_TIME TIMESTAMP DEFAULT NULL ,
	STATUS VARCHAR(10) ,
	EXIT_CODE VARCHAR(2500) ,
	EXIT_MESSAGE VARCHAR(2500) ,
	LAST_UPDATED TIMESTAMP,
	constraint JOB_INST_EXEC_FK foreign key (JOB_INSTANCE_ID)
	references BATCH_JOB_INSTANCE(JOB_INSTANCE_ID)
) ;
...
...

즉, table-prefix를 변경했다면 위 스키마 파일을 이용해서 table-prefix를 변경한 테이블을 직접 만들어줘야한다.

0개의 댓글