테스트한 스프링부트 버전 : Spring boot 2.7.15
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_
처럼
세팅했습니다.
그런데 이 상태에서 바로 실행하면 에러가 납니다!
아직 할 게 더 있습니다!
Spring Batch Core 에는 프레임워크 내에서 사용되는 테이블, 시퀀스가 있습니다.
그리고 core 라이브러리에서 Table, Sequence 생성 DDL.sql 파일을 제공합니다.
그 DDL.sql 파일의 내용을 복사해서 자신의 Local 에서 돌리기만 하면 끝입니다.
일단 해당 파일을 찾는 방법은 다음과 같습니다. (IDE: IntelliJ 기준입니다!)
ctrl + shift + n
을 입력하여 파일 찾기 팝업을 불러옵니다.All Places
로 바꿉니다.batch/core/schema-*.sql
라고 입력합니다.저의 경우에는 Postgresql 을 사용하니 schema-postgresql.sql
을 열어보겠습니다.
해당 파일을 그대로 실행해도 테이블은 잘 생성되지만,
이러면 당연히 기본 스키마인 public
스키마에 오브젝트가 생성됩니다.
제가 원하는건 BATCH_META
라는 스키마 밑에 오브젝트가 생성되길 바라는 겁니다.
그러니 이 SQL 문의 Table, Sequence 명칭 앞에 Schema 명칭을 덧붙여주는
작업을 하고 나서, 자신의 Local DBMS 상에서 수정한 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; -- 스키마 검색 경로 기본값을 원상 복구