すでに存在するデータベースにFlywayを適用する(その2) #flyway
概要
下記記事の続き。
今度はbaselineの設定を活用して、SQLとFlywayの足並みを調整する。
テスト用のデータベースを作る
create database if not exists flyway_sample character set utf8
flyway管理外のテーブルを追加する
mysql -u root -D flyway_sample_2
create table person ( `person_id` int not null, `name` varchar(100) not null ); create table hoge ( `hoge_id` int not null, `name` varchar(100) not null );
DDLを作成する
- src/main/resources/db/migration
この場合、既にpesonテーブルとhogeテーブルは作成済のため、実際に適用したいのは V1_2_0 以降となる。
Baselineを設定する
pom.xmlにて、baselineOnMigrate
と baselineVersion
を指定する。
baselineOnMigrateをtrueにして、baselineを有効化する。
baselineVersionは指定したバージョンがBaseline(適用済)となる。
つまり、1.0.1
を指定すると 1.2.0
移行のSQLがFlywayでMigrateされる
<build> <plugins> <plugin> <groupId>org.flywaydb</groupId> <artifactId>flyway-maven-plugin</artifactId> <version>4.0.3</version> <configuration> <url> jdbc:mysql://localhost:3306/flyway_sample </url> <user>root</user> <!-- Baselineの設定 --> <baselineOnMigrate>true</baselineOnMigrate> <baselineVersion>1.0.1</baselineVersion> </configuration> <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.6</version> </dependency> </dependencies> </plugin> </plugins> </build>
flyway:migrate する
mvn flyway:migrate
+---------+-----------------------+---------------------+---------+ | Version | Description | Installed on | State | +---------+-----------------------+---------------------+---------+ | 1.0.0 | create person | | <Baseln | | 1.0.1 | << Flyway Baseline >> | | <Baseln | | 1.2.0 | create fuga | 2017-06-08 09:51:07 | Success | | 1.2.1 | create piyo | 2017-06-08 09:51:07 | Success | +---------+-----------------------+---------------------+---------+
注意事項
- Baseline以前のDBの状態はユーザに委ねられるため、Flyway側では保証されない(当たり前だけど)
- データベースが空の場合、Baselineが効かない?
- 空なので、途中から流す必要ないので特に問題はないのだけれども
まとめ
flywayが好きだ。