素敵なサムシングを独断と偏見で一方的に紹介するブログ(´・ω・`)

IT

【DBマイグレーション】GradleにFlywayを組み込んでパッチ適用を自動化しよう【SpringBoot2】

投稿日: 2019年4月16日
最終更新日:

スポンサーリンク

336×280




パッチ管理を簡単にしよう

前回は、APIシステムをレイヤー構造にリファクタリングして動くところまでをご紹介しました。

今回は、データベース接続をするための準備として、DB定義用のパッチSQLファイルを用意し、Gradle経由でFlywayを用いて自動で適用させるところまでを整えていこうと思います。

Flywayとは

Flywayは、オープンソースで開発されているデータベースのマイグレーションツールです。


Version control for your database.
Robust schema evolution across all your environments.
With ease, pleasure and plain SQL.Flyway by Boxfuse • Database Migrations Made Easy.

特定のルールに沿ってパッチファイルを管理することで、コマンドライン一発でDBのマイグレーションを行うことが出来るので、当て忘れや順番を間違えたりなどのヒューマンエラーを避ける事が出来ます。

また、簡単にデータベースをリセットしたり、afterMigrate機能を使って開発データを入れる事が出来るので開発においても非常に有効なツールとなっています。

今回はGradleのSpringBootプロジェクトへのFlywayの導入方法簡単なマイグレーション処理をご紹介していこうと思います。

手順

完成系

今回は以下のような非常にシンプルなテーブル構造を作ってみようと思います。

テーブル名 用途
account.accounts アカウントのメインレコードを管理
account.account_infomations アカウントの基本情報を管理
account.sex_types 性別マスター
account.current_account_infomations 各アカウントの基本情報レコードは蓄積を想定するため、現在の有効な基本情報をマッピングするためのテーブル

application-{profile}.ymlの設定

まずは、Flywayを実行するにあたって必要な項目をapplication-{profile}.ymlに定義していきます。

なお、springbootには公式でFlywayの設定項目がありますが、今回は設定が反映されてしまって起動時に自動実行させたくないのもあるため、意図的にflywayMigrateという独自階層で定義していきます。

build.gradleの修正

datasourceプロジェクト

今回はシステム内部からFlywayを呼ぶことは想定していないので、dependenciesへの追加は不要です。

代わりにGradleから実行するためにpluginsに指定をする必要があります。

datasource/build.gradleを以下のように修正してみました。

devtoolsプロジェクト

devtools/build.gradleではgradle実行時に必要なPostgreSQLのドライバーとymlファイルを読み込むためのライブラリをクラスパスに追加します。

パッチファイル

次にパッチファイルを用意しましょう。今回は以下のような形で用意しました。

afterMigrateファイル

次にafterMigrateファイルを用意しましょう。

afterMigrateとは、パッチファイルの適用が終了した際に一度だけ適用されるSQLファイルの事を指します。

こちらを使うことで、各環境で同一データを使って動作確認を行ったり、簡単にデータベースのデータを同一の状態に戻すことが出来るのでとても便利です♪

実行確認

以下のコマンドを実行してみてください。

確認

それでは、DBの中身を見てみましょう。

正常にデータベース構造が構築され、AfterMigrateのデータも登録されていることが分かりますね♪

Flywayの適用状態はpublic.flyway_schema_historyが自動で生成されてそちらで管理されます。

また、afterMigrateを行いたくない場合はisAfterMigratablefalseにするだけでスキップされます。

検証や本番ではfalseにしておくと良いでしょう。

最初からDB定義を作り直したい場合

ローカル開発等で現在のデータベース構造をリセットして、最初からパッチやafterMigrateを当て直したい場合は、SPRING_PROFILES_ACTIVE=local ./gradlew flywayClean flywayMigrateで簡単に出来ちゃいます。

終わりに

これでDB定義の更新がコマンド一つでサクッと出来るようになりました。

次回はStubにしているデータソースの処理を実際にDBから取得するように変えていきたいと思います。

336×280




336×280




CATEGORIES & TAGS

IT, , , , , , , , ,

blogenist

Author: blogenist