Springにflywayを組み込む(テストのみ)
下記の通りにやったらプロダクトコードには組み込めた。
ただ、テストでは使えなかった。 下記のリンク先にある通り、flyway-spring-testを依存関係に入れて、@FlywayTestをつけるとテスト実行時にflywayのマイグレーションが走った。
ただ、マイクロサービスで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)