[Spring Batch] public 이 아닌 다른 schema 에 Batch Meta Table 생성하기

식빵·2023년 9월 3일
0

spring-batch

목록 보기
2/2

테스트한 스프링부트 버전 : Spring boot 2.7.15


🧪 application.properties 수정

application.properties 를 아래처럼 작성하면 됩니다.

spring.datasource.driver-class-name=org.postgresql.Driver
spring.datasource.url=jdbc:postgresql://localhost:10011/postgres
spring.datasource.username=postgres
spring.datasource.password=postgres


#### 이 아래가 핵심! #### 
# 1. "spring.batch.jdbc.table-prefix" 설정에 "{스키마 지정}.BATCH_" 값을 준다
# 2. "spring.batch.jdbc.initialize-schema=never" 로 설정한다.
spring.batch.jdbc.table-prefix=BATCH_META.BATCH_
spring.batch.jdbc.initialize-schema=never

저는 Spring Batch 에서 사용되는 모든 테이블, 시퀀스들을 BATCH_META 라는
스키마 아래에 두기 위해서 spring.batch.jdbc.table-prefix=BATCH_META.BATCH_ 처럼
세팅했습니다.

그런데 이 상태에서 바로 실행하면 에러가 납니다!
아직 할 게 더 있습니다!



🧪 Batch Core DDL 수동 실행

1. Spring Batch 기본제공 DDL

Spring Batch Core 에는 프레임워크 내에서 사용되는 테이블, 시퀀스가 있습니다.
그리고 core 라이브러리에서 Table, Sequence 생성 DDL.sql 파일을 제공합니다.
그 DDL.sql 파일의 내용을 복사해서 자신의 Local 에서 돌리기만 하면 끝입니다.

일단 해당 파일을 찾는 방법은 다음과 같습니다. (IDE: IntelliJ 기준입니다!)

  1. ctrl + shift + n 을 입력하여 파일 찾기 팝업을 불러옵니다.
  2. 팝업 상단 우측에서 필터링 조건을 All Places 로 바꿉니다.
  3. 검색 입력란에 batch/core/schema-*.sql 라고 입력합니다.
  4. 검색 결과에서 자신의 DBMS 에 맞는 걸 선택해서 Enter 를 입력합니다.

저의 경우에는 Postgresql 을 사용하니 schema-postgresql.sql 을 열어보겠습니다.

해당 파일을 그대로 실행해도 테이블은 잘 생성되지만,
이러면 당연히 기본 스키마인 public 스키마에 오브젝트가 생성됩니다.

제가 원하는건 BATCH_META 라는 스키마 밑에 오브젝트가 생성되길 바라는 겁니다.
그러니 이 SQL 문의 Table, Sequence 명칭 앞에 Schema 명칭을 덧붙여주는
작업을 하고 나서, 자신의 Local DBMS 상에서 수정한 SQL 을 실행시켜줘야 합니다.



2. 기본제공 DDL 수정 및 실행

  1. 앞서 찾았던 DDL SQL 파일의 내용을 복사해오고,
  2. 맨 앞에는 자신의 원하는 스키마를 먼저 생성하고,
  3. 기본제공 DDL SQL 파일의 내용에서 테이블, 시퀀스 이름 앞에 스키마 명을 덧붙여줍니다.

이러고 나서 실행하고, Spring Batch App 을 실행시켜보면 정상적으로
해당 스키마의 테이블을 참조하는 것을 확인할 수 있습니다.

참고

postgresql 사용자의 경우에는 아래처럼도 할 수 있습니다.

create schema if not exists BATCH_META;
set search_path = BATCH_META; -- 잠시 사용하는 스키마를 BATCH_META 로 제한

-- 여기에는 Spring Batch Core 에서 제공하는 SQL 내용물을 모두 복붙합니다.

set search_path = default; -- 스키마 검색 경로 기본값을 원상 복구



profile
백엔드를 계속 배우고 있는 개발자입니다 😊

0개의 댓글