Web系開発メモ

Java, C#, HTML, CSS, JavaScript のことなどを書いてます。

SpringBoot FlywayでDBのマイグレーションをする方法

Spring Boot の Webアプリで、Flyway を使ってデータベースのマイグレーションをする方法を書いていきます。

バージョン

動作確認で使用した製品のバージョンは以下の通りです。

1. ビルドファイルの作成

プロジェクトのフォルダ spring-flyway を作成して、その下に Maven のビルドファイルを作成します。

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.0.1</version>
    <relativePath/> <!-- lookup parent from repository -->
  </parent>

  <groupId>org.example</groupId>
  <artifactId>spring-flyway</artifactId>
  <version>1.0.0</version>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>17</java.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.flywaydb</groupId>
      <artifactId>flyway-core</artifactId>
    </dependency>
    <dependency>
      <groupId>org.postgresql</groupId>
      <artifactId>postgresql</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>
</project>

以下のライブラリを依存性に追加すると、アプリの起動時にマイグレーションが実行されます。

  • flyway-core
  • Spring Boot の JPA か JDBC

2. SQLファイルの作成

マイグレーション用の SQLファイルを作成します。

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

CREATE TABLE student (
  id bigserial PRIMARY KEY,
  name varchar(60) NOT NULL,
  update_time timestamp NOT NULL DEFAULT current_timestamp,
  create_time timestamp NOT NULL DEFAULT current_timestamp
);

2.1. ファイルの配置場所

SQLファイルは、クラスパス配下の db/migration ディレクトリに配置します。

2.2. ファイルの命名規則

SQLファイルの命名規則は以下の通りです。

V{バージョン番号}__{任意の文字列}.sql

バージョン番号と文字列の間は、半角のアンダースコア2つです。

3. 設定ファイルの作成

PostgreSQL に接続するための設定ファイルを作成します。

src/main/resources/application.properties

spring.datasource.url=jdbc:postgresql://localhost:5432/flyway
spring.datasource.username=usr
spring.datasource.password=pass

4. 起動クラス

Spring Boot のアプリを起動するクラスを作成します。

src/main/java/org/example/SpringApp.java

package org.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringApp {
  public static void main(String[] args) {
    SpringApplication.run(SpringApp.class, args);
  }
}

5. アプリの起動

起動クラスを実行するか、以下のコマンドでアプリを起動します。

mvn spring-boot:run

6. DBの確認

PostgreSQL のコマンド \d で、テーブルが作成されていることを確認しました。