Spring Bootのマイグレーション
開発をするにあたってDBのバージョン管理をしっかりするためにもマイグレーションは必要です。
Spring Bootでは、Flywayを使えばとても楽にマイグレーションを行うことができます。
※この手順では、application.ymlなどに以下のような設定があり、データベースとの接続設定は完了しているものとします。
例)
spring: datasource: url: jdbc:mysql://localhost/test-database?useSSL=false&characterEncoding=UTF-8 username: root password: root driverClassName: com.mysql.jdbc.Driver
Flywayライブラリの追加
まず、Flywayライブラリを使うためにpom.xmlに以下を追加してください。
<dependency> <groupId>org.flywaydb</groupId> <artifactId>flyway-core</artifactId> </dependency>
もちろんMavenの再読み込みは忘れずに。
マイグレーションパッケージ、ファイルの作成
次に、src/main/resourcesにdb.migrationパッケージを作成してください。
これで準備OKです。
めちゃめちゃ簡単ですね。
マイグレーションファイルは、「V + バージョン番号__任意のファイル名.sql」といった形式で作成してください。
例えば以下のようになります。
V1__create-users.sql
V2__create-products.sql
V3__alter-users.sql
任意のファイル名の箇所は本当に何でも良いですが、後で見た時に意味がわかるようなファイル名にしておきましょう。
マイグレーションファイルは、開発を重ねるほどどんどん増えていくため、内容によってファイル名のルールを決めておくと良いでしょう。
例としてUsersテーブルを作成するマイグレーションファイルを作成します。
V1__create-users.sql
create table users ( id integer primary key, mail_address varchar(255), password char(30), updated_at timestamp not null default current_timestamp, created_at timestamp not null default current_timestamp );
通常のSQLのDDL文ですよね。
この状態でアプリケーションを起動させると、usersテーブルが作成されます。
バージョン情報はschema_versionというテーブルで履歴が管理され、アプリケーション実行時に未反映のマイグレーション処理が実行されます。
初回の実行時にはschema_versionテーブルは存在していないはずなので、そのような場合は勝手にテーブルは作成されるので心配いりません。
マイグレートに失敗した場合
例えばシンタックスエラーなど、SQLが失敗する要因はいくつかあると思いますが、失敗した場合、scheme_versionテーブルの該当のバージョンのsuccessカラムの値が0のままになります。(成功した場合は1になります。)
この状態でSQLを修正して再実行しても上手くいきません。
再度実行したい場合は、該当のバージョンのレコードを削除してから再実行しましょう。
失敗時の再実行に関しては少し面倒ですね。
- 出版社/メーカー: Amazon
- 発売日: 2017/04/06
- メディア: エレクトロニクス
- この商品を含むブログ (17件) を見る
新登場 Fire TV Stick 4K - Alexa対応音声認識リモコン付属
- 出版社/メーカー: Amazon
- 発売日: 2018/12/12
- メディア: エレクトロニクス
- この商品を含むブログを見る
Fire HD 10 タブレット (10インチHDディスプレイ) 64GB
- 出版社/メーカー: Amazon
- 発売日: 2017/10/11
- メディア: エレクトロニクス
- この商品を含むブログ (4件) を見る