Spring Boot の Webアプリで、Flyway を使ってデータベースのマイグレーションをする方法を書いていきます。
バージョン
動作確認で使用した製品のバージョンは以下の通りです。
- SpringBoot 3.0.1
- Java 17
- Maven 3.8.6
- PostgreSQL 15.1
- pgJDBC 42.5.1(JDBC Driver)
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>
以下のライブラリを依存性に追加すると、アプリの起動時にマイグレーションが実行されます。
2. 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. ファイルの命名規則
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
で、テーブルが作成されていることを確認しました。