본문 바로가기
Dev/JPA

[Spring Boot/JPA] hibernate.ddl-auto 옵션으로 서버를 실행할 때마다 DB 초기화하기

by 돈코츠라멘 2019. 9. 13.

JPA로 DB를 초기화하는 방법은 두 가지가 있다.

  1. spring.jpa.generate-ddl (boolean) switches the feature on and off and is vendor independent.
  2. spring.jpa.hibernate.ddl-auto (enum) is a Hibernate feature that controls the behavior in a more fine-grained way. This feature is described in more detail later in this guide.

여기서 2. spring.jpa.hibernate.ddl-auto를 통해 DB 초기화 전략을 만들 때 사용할 수 있는 옵션 값은 none, update, validata, create, create-drop이 있다.

  • none: No change to the database structure.
  • update: Hibernate changes the database according to the given Entity structures. - 변경된 스키마만 적용한다.
  • validate: 변경된 스키마가 있는지 확인만 한다. 만약 변경이 있다면 Application을 종료한다.
  • create: Creates the database every time, but don’t drop it when close. - 시작될 때만 drop하고 다시 생성한다.
  • create-drop: Creates the database then drops it when the SessionFactory closes. - 시작과 종료에서 모두 drop한다.

 


아래 application.yml 파일의 일부는 테스트 환경에서 사용 중인 설정 예시이다. DB는 H2(In-Memory)를 사용하였고 create-drop 옵션을 사용하여 SessionFactory가 종료될 때마다 drop 한다.

spring:
  profiles: test
  datasource:
    url: jdbc:h2:mem:test;DB_CLOSE_DELAY=-1
    username: sa
    password:
    driverClassName: org.h2.Driver
  jpa:
    database-platform: H2
    show-sql: true
    hibernate:
      ddl-auto: create-drop

사실 H2에서는 create-drop이 default라 예시와 같이 명시적으로 쓰지 않아도 무관하다. 하지만 다른 DB를 테스트에서 사용하는 경우 대부분 none이 default이므로 적절한 옵션 값으로 바꿔서 사용하면 된다.

The default for H2 and other embedded databases is create-drop, but for others like MySQL is none

 


Reference

'Dev > JPA' 카테고리의 다른 글

Kotlin으로 Spring Boot JPA 프로젝트에 Querydsl 적용하기  (0) 2019.10.01

댓글