Spring Boot の Webアプリで、Flyway を使ってデータベースのマイグレーションをする方法を書いていきます。
動作確認で使用した製品のバージョンは以下の通りです。
プロジェクトのフォルダ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>
以下のライブラリを依存性に追加すると、アプリの起動時にマイグレーションが実行されます。
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);
SQLファイルは、クラスパス配下のdb/migrationディレクトリに配置します。
V{バージョン番号}__{任意の文字列}.sqlバージョン番号と文字列の間は、半角のアンダースコア2つです。
PostgreSQL に接続するための設定ファイルを作成します。
src/main/resources/application.properties
spring.datasource.url=jdbc:postgresql://localhost:5432/flywayspring.datasource.username=usrspring.datasource.password=pass
Spring Boot のアプリを起動するクラスを作成します。
src/main/java/org/example/SpringApp.java
package org.example;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublicclass SpringApp {publicstaticvoid main(String[] args) { SpringApplication.run(SpringApp.class, args); }}
起動クラスを実行するか、以下のコマンドでアプリを起動します。
mvn spring-boot:run
PostgreSQL のコマンド\d で、テーブルが作成されていることを確認しました。
引用をストックしました
引用するにはまずログインしてください
引用をストックできませんでした。再度お試しください
限定公開記事のため引用できません。