I am using Springboot and Flyway. The migrations work just fine but I wanted to be able perform a clean
flyway command when the application context gets loaded with test
profile.
Is it possible to configure SpringBoot to do clean
and then migrate
if active profile is test
?
The hotfix migration can be deployed with Flyway with skipExecutingMigrations=true . The schema history table will be updated with the new migration, but the script itself won't be executed again. skipExecutingMigrations can be used with with cherryPick to skip specific migrations.
Spring Boot comes with out-of-the-box integration for Flyway. Spring Boot will then automatically autowire Flyway with its DataSource and invoke it on startup. You can then configure a good number of Flyway properties directly from your application. properties or application.
You can overwrite the Flyway autoconfiguration like this:
@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;
}
In Spring Boot 1.3 (current version is 1.3.0.M1, GA release is planned for September), you can use a FlywayMigrationStrategy bean to define the actions you want to run:
@Bean
@Profile("test")
public FlywayMigrationStrategy cleanMigrateStrategy() {
FlywayMigrationStrategy strategy = new FlywayMigrationStrategy() {
@Override
public void migrate(Flyway flyway) {
flyway.clean();
flyway.migrate();
}
};
return strategy;
}
in more recent versions of spring boot (eg 2.0.2) you can use the property spring.flyway.clean-on-validation-error
if you want to use clean because of a change in the sql files
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With