Ruby on Railsは、デフォルトでDBのマイグレーション機能が搭載されていますが、SpringBootでは自分で導入するしか有りません。マイグレーションツールであるFlywayを導入するのに手こずったため、纏めて行こうかと思います。
準備
pom.xml
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
</dependency>
依存関係の階層に、このように書いてあげます。
合わせてmvnのコマンドを使用したいので、プラグインにも下記の通り指定しています。
pom.xml
<build>
<plugins>
<plugin>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-maven-plugin</artifactId>
<version>6.0.8</version>
<configuration>
<url>DBのURLを指定して下さい?currentSchema=DB側でスキーマを指定している場合は指定して下さい。</url>
<user>DBのUSERを指定して下さい。</user>
<password></password>
<schemas>
<schema>ssp_engine</schema>
</schemas>
<baselineOnMigrate>true</baselineOnMigrate>
<baselineVersion>1.0</baselineVersion>
<baselineDescription>Initial</baselineDescription>
<locations>classpath:/db/migration</locations>
</configuration>
</plugin>
</plugins>
</build>
あとは、Mavenでプロジェクトを更新してあげて、jarファイルをインポートします。
DBの命令ファイル作成
ファイル名は厳密に決まっているので、こちらを参考下さい。
・Flyway使い方メモ
僕の場合、こんな感じになりました。
階層は、
-src/
-main/
|-java/
| -com/
| -example/
| -main.java
-resources/
-db/
-migration/
-V1_0__create_sequence.sql
-V1_1__create_table.sql
-V1_2__create_data.sql
ファイルの中身は、シーケンスオブジェクトを生成したり、テーブルを作って、中身を書いたりしてます。
コマンド実行
ご自身のお使いのターミナルで、対象となるファイルがある階層まで行き、下記のコマンドを実行すると実行出来ます。
マイグレーションを実行する
mvn flyway:migrate
データベース上の全てのオブジェクトを削除する
mvn flyway:clean
マイグレーションがどのバージョンまで実行されているかの情報を表示する
mvn flyway:info
データベースと用意されているSQLファイルのバージョンに差異が無いかを確認する
mvn flyway:validate
データベースのバージョン1にする
mvn flyway:init
状態がFailedになっているバージョンのメタデータを削除する
mvn flyway:repair
導入した感想
localで開発中に、フォーム等でCRUDの確認後、mvn flyway:clean
して、mvn flyway:migrate
してリセット目的でしか活用出来ていません。
もっと、有効活用の仕方があれば、聞きたいです。。