--- title: 途中からFlywayでDBマイグレーション導入するときの既存DBへのセットアップ tags: ["Flyway", "Java"] categories: ["Dev", "DBMigration", "Flyway"] date: 2014-04-19T02:25:58Z updated: 2014-04-19T02:25:58Z --- 運用中の既存アプリに途中から[Flyway][1]を導入したいときのメモ。 導入するときに用意するSQLが以下のV1~V3、現在運用中のバージョンがV2相当だとする。 * V1__Create_initial_tables.sql * V2__Insert_initial_data.sql * V3__Add_schema_for_OAuth2.sql 現在運用中のDBに対して、 $ mvn flyway:info を実行すると、Flywayはまだ導入されていないので、↓のような結果になる。 +----------------+----------------------------+---------------------+---------+ | Version | Description | Installed on | State | +----------------+----------------------------+---------------------+---------+ | 1 | Create initial tables | | Pending | | 2 | Insert initial data | | Pending | | 3 | Add schema for OAuth2 | | Pending | +----------------+----------------------------+---------------------+---------+ いまV2相当なので、V1とV2は適用したくなくて、V3から適用したい。そういうときは↓を実行する。 $ mvn flyway:init -Dflyway.initVersion=2.1 -Dflyway.initDescription="Base Version" そうすると`mvn flyway:info`の結果はこうなる。 +----------------+----------------------------+---------------------+---------+ | Version | Description | Installed on | State | +----------------+----------------------------+---------------------+---------+ | 1 | Create initial tables | | PreInit | | 2 | Insert initial data | | PreInit | | 2.1 | Base Version | 2014-04-19 20:36:07 | Success | | 3 | Add schema for OAuth2 | | Pending | +----------------+----------------------------+---------------------+---------+ V2とV3の間にV2.1を割り込ませる格好となる。 $ mvn compile flyway:migrate を実行すると、`mvn flyway:info`の結果は +----------------+----------------------------+---------------------+---------+ | Version | Description | Installed on | State | +----------------+----------------------------+---------------------+---------+ | 1 | Create initial tables | | PreInit | | 2 | Insert initial data | | PreInit | | 2.1 | Base Version | 2014-04-19 20:36:07 | Success | | 3 | Add schema for OAuth2 | 2014-04-19 20:36:27 | Success | +----------------+----------------------------+---------------------+---------+ となり、無事途中からFlywayの導入ができた。 [1]: http://flywaydb.org/