Maven
spring-boot
Flyway
SpringBoot

Spring Bootでflywayを使ってみた。

More than 1 year has passed since last update.

前提

FlywayはSQLで定義したスキーマに基づき、DBを作成してくれるDBマイグレーションツールです。

Flywayのサイトはこちら

ツール
Java 1.8
Spring Boot 1.5.4
Maven 3.5.0
MySQL 5.5
開発環境 STS

今回はDBとしてMySQLを使います。

src/main/resources以下にある、application.yml で、マイグレーションの対象となるDBを定義しましょう。こちらのDBに対して、テーブルやらカラムやらが追加されます。

spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/<DB名>
    username: <User名>
    password: <Password>
    driverClassName: com.mysql.jdbc.Driver

マイグレーションツールってなんだっけ?

Flywayに限らず、マイグレーションツールをどういう時に使うかですが、こういうツールがないとどういうことが発生するかを考えてみます。

マイグレーションツールは簡単にいうと、現在のDBの状態に関する情報を「一箇所で管理し、再現する」ツールです。

現在のDBの状態というのは、現在のテーブル構成、カラム構成にいたるまでにどういう作成・変更等があったかの情報のことです。

アプリが参照するDBにどういうテーブルがあって、どういうカラムがあるのか、その最新の情報は本番サーバを見れば確かにわかります。

一方で、別の開発者が本番DBに新しいカラム、テーブルを追加した等のDB環境の変更に関する情報を、逐一把握し、それを自分の開発環境に手動で反映するとなると骨が折れます。
どこかで、情報伝達の失敗が起こると、開発者間でも違うDBの状況になり、ある人は、古いテーブル定義のまま開発し続けることになります。「よし、テストするか」という段階で、必要なカラムがあったことに気付いたりします。つまり、複数の開発者間でDBの情報が違う状態が起こり得ます。

そんな時に役立つのがDBマイグレーションツール。

  • DBの定義やその変更に関する情報を一箇所で管理する
  • その情報に基づき最新のDBの状態を自動で再現する

というようなことをやってくれます。

導入の方法

さて、追加の方法ですが、

  • Mavenのビルドファイルに設定追加
  • テーブルの定義ファイルを追加

で、出来ます。

Mavenのビルドファイルに設定追加

MavenのビルドファイルにFlywayを追加します。

pom.xml
<dependency>
  <groupId>org.flywaydb</groupId>
  <artifactId>flyway-core</artifactId>
</dependency>

テーブルの定義ファイルを追加

src/main/resources/db/migration/以下にsqlファイルを追加します。
sqlファイルの名前についてはルールがあり、

V<バージョン>__<任意の名前>.sql

とつけます。ファイル名のルールは以下のようになってます。

  • One or more numeric parts
  • Separated by a dot (.) or an underscore (_)
  • Underscores are replaced by dots at runtime
  • Leading zeroes are ignored in each part
src/main/resources/db/migration/V1__User.sql
CREATE TABLE `User` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(40) DEFAULT NULL,
  PRIMARY KEY (`id`)
) 

実行

Flywayでマイグレーションする方法はSTSより、
[Run] -> [Run As] -> [Spring Boot App]
と、普段の開発時の実行と同じように Appを実行するだけです。とても簡単。

対象のDBに
User テーブルと schema_version テーブルが作成されます。

参考

http://web-dev.hatenablog.com/entry/spring-boot/intro/flyway
http://qiita.com/osuo/items/3aa375f1a1d6dd3d2459

今後

使って見てさらに内容を充実させていきます。