Spring Bootでliquibaseを使う方法(MySQL)

求人
Spring Bootでliquibaseを使う方法(MySQL)
Springバージョン
2.1.1.RELEASE

liquibase(リキベース)を使うとSpring Bootアプリケーションを実行する際にデータベースを作成して、さらにテーブルを作成したりデータ投入したり、テーブル削除したりと、マイグレーション管理ができるようです。

とりあえずデータベース作成して、テーブルをcreateしたかったのでliquibaseを使ってみました。

Spring Bootのスタータープロジェクトからliquibaseを選択します。

Spring Bootでliquibaseを使う方法(MySQL)

テーブルを作成するにはxml形式かyml形式でファイルを作成します。Spring Bootアプリケーション起動時に順次読み込んでテーブルを作成していってくれます。

前提として、ローカルPCにMySQLがインストールされていることとします。

build.gradleを以下のように修正します。これで起動時にliquibaseが実行されます。

公式サイトを見るとどうもデフォルトのファイル名はdb.changelog-master.yamlのようです。

src\main\resources\db\changelog\db.changelog-master.yamlを配置します。

db.changelog-master.yaml

複数ある場合は改行してファイル名を指定していきます。

複数ファイルある場合のdb.changelog-master.yaml(デフォルトのファイル名です)の中身は以下のようになると思います。

上記ではa.yamlを読み込んだ後にb.yamlを読み込みます。

db.changelog-master.yamlでテーブル作成したりもできますし、上記のようにファイル分割することもできます。

a.yamlの記述例です。

参考サイト

プロパティ名

MySQLにクエリパラメータでプロパティを設定することができます。

createDatabaseIfNotExist=true … データベースが存在しなければデータベースを作成する

参考サイト

application.properties

このファイルにMySQLの接続情報を記載しておきます。

spring.jpa.hibername.ddl-autoで指定できる値は以下の通りです。

挙動
none 何もしない
validate よくわからない
update テーブルがなければ作成する
create テーブルがなければ作成する
create-drop テーブルがなければ作成するが、終了時にテーブルは削除される

spring.liquibase.change-log=classpath:db/changelog/db.changelog-master.yamlでクラスパスとファイル名を変更できます。

Spring Bootアプリケーションを実行する

ではSpring Bootアプリケーションを実行してみます。sampledbというデータベースが作成され、databasechangelogテーブル、databasechangeloglockテーブル、personテーブル(@Tableアノテーションで指定したエンティティのテーブル)が作成されればOKです。

テーブルにカラムを追加する

liquibaseはテーブルを作成しますが、そのあとテーブルのカラムが追加だったりした場合に新たにymlファイルを作成して、ALTER TABLE文を発行します。

ALTER TABLE文の実行方法は以下のようにします。

これで以下を実行するのと同じになります。

カラムを複数追加したい場合は- column:の箇所を追加したい文だけ記述します。

テーブルのカラム名をリネームする

liquibaseはマイグレーションツールですが、簡単に言うとテーブル作成します。で、カラム名変わったのでカラム名を変更します。そのあとにテーブルが不要になったのでdropします、というような履歴ツールです。

今回はカラム名をリネームするymlを作成します。

これでカラム名をリネームできるのですが、旧カラム名にnot null制約がついていた場合、制約が消えてしまいます。その場合は以下のように記述する必要があります。

テーブルのカラムの型を変更する

テーブルのカラムの型を変更するymlを作成します。以下ではintに変更しています。

ユニークキーを付ける

ユニークキーを付けます。

以下と同様です。

スポンサーリンク
  • このエントリーをはてなブックマークに追加
スポンサーリンク

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA