- 참고문헌: 68. Database initialization - SpringBot Reference document
애플리케이션이 초기에 가동될 때 필요한 데이터를 입력하는 작업은 필수적인 기초작업이다. ㅡ_-)>
애플리케이션 개발이 완료된 단계에서는 Flyway를 이용해서 DB 마이그레이션을 진행하면 되지만, 한창 개발중인 와중인지라 엔티티가 변경될 가능성도 높고해서 생성에 필요한 부분들을 당장 Flyway로 적재할 필요가 없어서 설정만 해두었다.
SpringBoot(Hibernate + Spring Data JPA)를 활용할 때 데이터베이스를 초기화 하는 방법은
- JPA를 이용해서 데이터베이스를 초기화
- spring.jpa.generate-ddl (boolean) switches the feature on and off and is vendor independent.
- spring.jpa.hibernate.ddl-auto (enum) is a Hibernate feature that controls the behavior in a more fine-grained way. See below for more detail.
- Hibernate를 이용해서 데이터베이스 초기화
import.sql
를 루트클래스 경로에 놓아두면 시작시 실행된다.
- Spring JDBC를 이용해서 데이터베이스 초기화
- 설정파일에서
spring.datasource.initialize
를 추가해두고 - schema.sql 를 사용하면 JPA에서 설정해두면 JPA에서 테이블 생성할 때 schema.sql에 동일한 테이블이 있으면 문제가 생긴다.
ddl-auto=create-drop
으로 설정해두고 새로운 기초데이터를 넣기 위한data.sql
을 사용할 수 있다.지금 사용하는 프로젝트에서는
spring.datasource.initialize
설정을 통해서data.sql
을 이용하는 방법이 편해보여서 그렇게 했다.
- 설정파일에서
- Spring Batch database를 이용한 초기화
- 가장 범용적으로 사용되는 SQL 초기화 스크립트를 이용한 방법이다.
- 혹은 높은 수준의 데이터베이스 마이그레이션 도구를 사용
- Flyway
- Liquibase
Spring JDBC를 이용해서 데이터베이스 초기화 설정방법
spring:
datasource:
initialize: true
driverClassName: org.h2.Driver
url: jdbc:h2:file:./h2database;AUTO_SERVER=TRUE
username: user
password:
위와 같이 설정해두고
project/java/main/resource 경로에 data.sql을 넣어두어 프로젝트 초기화 데이터를 넣어두었다. 최초 실행시 initialize
를 true
로 두고 구동하면 JPA에 의해 테이블이 생성된 후에 data.sql
이 실행되면서 데이터가 입력된다. 이후에는 initialize
를 false
로 변경하면 된다.
혹은,
spring:
datasource:
initialize: false
로 둔 상태에서 ./gradlew bootRepackage
로 실행가능한 아카이브 파일로 만들어두고
$ java -jar archive.war --spring.datasource.initialize=true
로 실행하면 최초에 data.sql
이 실행될 것이다(아마도…?).
'Java > SpringBoot' 카테고리의 다른 글
스프링부트 1.2.0 새로운 애노테이션, @SpringBootApplication (0) | 2015.01.20 |
---|---|
Sevlert 3.x, Spring MVC MultipartFile를 이용한 업로드가 되지 않는 경우 (4) | 2015.01.19 |
spring-boot-starter-web 의존성 살펴보기 (0) | 2015.01.05 |
SpringBoot: JPA Auditing Javaconfig 설정 (0) | 2014.12.26 |
Spring Boot Document 목차 (0) | 2014.12.12 |