web-dev-qa-db-ja.com

SpringBootアプリで移行前にflyway:cleanを実行する方法は?

SpringbootとFlywayを使用しています。移行は問題なく機能しますが、アプリケーションコンテキストにcleanプロファイルが読み込まれたときにtestフライウェイコマンドを実行できるようにしたかったのです。

アクティブなプロファイルがcleanの場合、migrateを実行してからtestを実行するようにSpringBootを構成することは可能ですか?

14
Barbadoss

Flywayの自動構成は次のように上書きできます。

@Bean
@Profile("test")
public Flyway flyway(DataSource theDataSource) {
    Flyway flyway = new Flyway();
    flyway.setDataSource(theDataSource);
    flyway.setLocations("classpath:db/migration");
    flyway.clean();
    flyway.migrate();

    return flyway;
}

Spring Boot 1.3(現在のバージョンは1.3.0.M1、GAリリースは9月に予定されています))では、FlywayMigrationStrategy Beanを使用して、実行するアクションを定義できます。

@Bean
@Profile("test")
public FlywayMigrationStrategy cleanMigrateStrategy() {
    FlywayMigrationStrategy strategy = new FlywayMigrationStrategy() {
        @Override
        public void migrate(Flyway flyway) {
            flyway.clean();
            flyway.migrate();
        }
    };

    return strategy;
}
35
dunni

spring Bootの最新バージョン(例:2.0.2)では、SQLファイルの変更のためにcleanを使用する場合は、プロパティspring.flyway.clean-on-validation-errorを使用できます。

3