Help us understand the problem. What is going on with this article?

Spring Bootでflywayを使ってみた。

More than 3 years have 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

今後

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

peg
趣味は、昼寝です
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away