doilux’s tech blog

ITに関する備忘録。 DDP : http://doiluxng.hatenablog.com/entry/2018/01/01/195409

Springにflywayを組み込む(テストのみ)

下記の通りにやったらプロダクトコードには組み込めた。

qiita.com

ただ、テストでは使えなかった。 下記のリンク先にある通り、flyway-spring-testを依存関係に入れて、@FlywayTestをつけるとテスト実行時にflywayのマイグレーションが走った。

github.com

ただ、マイクロサービスで1チーム2、3人でメンテしてー、くらいの規模ならともかく、1つのソースコードを複数チームでメンテしてーってなると意図しないスキーマ変更が入ってバグりそうなので、プロダクトコードではFlywayを使いたくないです(自動でマイグレートして欲しくない)。テストのみで使うために以下のようにした。

まず、マイグレーションスクリプトをtest/resource配下に移動。flywayに関する依存をtestCompaileにしました。

    // https://mvnrepository.com/artifact/org.flywaydb/flyway-core
    testCompile group: 'org.flywaydb', name: 'flyway-core', version: '5.0.7'

    // https://mvnrepository.com/artifact/org.flywaydb.flyway-test-extensions/flyway-spring-test
    testCompile group: 'org.flywaydb.flyway-test-extensions', name: 'flyway-spring-test', version: '5.0.0'

そうすると./gradlew clean bootRunしたときにはテーブルは作られず。

mysql> show tables;
Empty set (0.00 sec)

テストを走らせるとテーブルができた。

mysql> show tables;
+--------------------------+
| Tables_in_hr             |
+--------------------------+
| employee_register_events |
| flyway_schema_history    |
+--------------------------+
2 rows in set (0.01 sec)