Skip to content

DB 초기화 설정하기

kimhanui edited this page Nov 13, 2020 · 1 revision

예제참고 링크: https://walkingtechie.blogspot.com/2018/12/execute-schema-and-data-sql-on-startup-spring-boot.html

차이

ddl-auto - schema 생성관여
initialization-mode - schema, data 생성관여

예시 (schema.sql(DDL), data.sql(DML) 따로 작성했을 때)

spring.jpa.generate-ddl=false //그냥 t or f
spring.jpa.hibernate.ddl-auto=none
spring.datasource.initialization-mode=always
  • ddl-auto : 위에서 참일때 스키마 자동 생성 옵션을 선택해준다. 사실 위에서 false로 설정해도 여기서 "none이외의" 값을 선택하면 자동생성되는 것 같다.
  • initialization-mode: 외부DB를 사용할땐 반드시 always로 설정해야 초기화 가능하다.stackoverflow 질문

이렇게 설정해야 같이 초기화된다.

주의할 점

spring.jpa.hibernate.ddl-auto=create
spring.datasource.initialization-mode=always

위와 같이 설정하면 충돌난다. 스키마 자동생성 전략에 대한 충돌이다.
해결은 아래와 같이 하면 된다.

spring.jpa.hibernate.ddl-auto=none
spring.datasource.initialization-mode=always
#또는

spring.jpa.hibernate.ddl-auto=create
spring.datasource.initialization-mode=never
spring.datasource.data = classpath:data-maria.sql

platform 써보기

platform 옵션을 이용해서 각 db마다 data,schema를 다르게 초기화해줄 수 있다.

예시

#MARIADB
spring.datasource.platform=maria
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=${JAWSDB_MARIA_URL}
spring.datasource.username=${JAWSDB_MARIA_USERNAME}
spring.datasource.password=${JAWSDB_MARIA_PASSWORD}
spring.datasource.sql-script-encoding=UTF-8

MariaDB에 사용할 스크립트는 data-{name}.sql, schema-{name}.sql로 네이밍해서 위와같이 적용하면 된다.
여기선 data-maria.sql을 이용했다.