Spring Boot | 데이터베이스 접근 | Flyway으로 마이그레이션

Flyway으로 마이그레이션

코드 작성

build.gradle

dependencies {
    compile 'org.springframework.boot:spring-boot-starter-data-jpa'
    compile 'org.hsqldb:hsqldb'
+   compile 'org.flywaydb:flyway-core'
}

application.properties

spring.jpa.hibernate.ddl-auto=none

src/main/resources/db/migration/V1create_database.sql

CREATE TABLE HOGE (
    ID INTEGER NOT NULL IDENTITY,
    VALUE VARCHAR(256)
);

INSERT INTO HOGE (VALUE) VALUES ('HOGE');
INSERT INTO HOGE (VALUE) VALUES ('FUGA');
INSERT INTO HOGE (VALUE) VALUES ('PIYO');

Main.java

package sample.springboot;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

import sample.springboot.jpa.HogeRepository;

@SpringBootApplication
public class Main {

    public static void main(String[] args) throws Exception {
        try (ConfigurableApplicationContext ctx = SpringApplication.run(Main.class, args)) {
            Main m = ctx.getBean(Main.class);
            m.method();
        }
    }

    @Autowired
    private HogeRepository repository;

    public void method() {
        this.repository.findAll().forEach(System.out::println);
    }
}

실행 결과

Hoge [id=0, value=HOGE]
Hoge [id=1, value=FUGA]
Hoge [id=2, value=PIYO]
  • Flyway을 의존관계에 추가하면 서버 시작시에 마이그레이션을 실행하게 된다.
  • JPA를 사용하는 경우에는 JPA가 DB를 자동 생성하지 않도록하지 않으면 안되기 때문에, spring.jpa.hibernate.ddl-auto=none을 지정한다.