From a270c13d6f75b2516dccd4034c0614e65d06ee69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edd=C3=BA=20Mel=C3=A9ndez?= Date: Tue, 1 Mar 2016 22:40:56 +1000 Subject: [PATCH] Upgrade to Flyway 4.0 Closes gh-5344 --- .../flyway/FlywayAutoConfiguration.java | 11 ++++- .../flyway/FlywayAutoConfigurationTests.java | 42 +++++++++++++++++++ spring-boot-dependencies/pom.xml | 2 +- 3 files changed, 53 insertions(+), 2 deletions(-) diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration.java index 8c474f81ff..db045bf800 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration.java @@ -26,6 +26,7 @@ import javax.sql.DataSource; import org.flywaydb.core.Flyway; import org.flywaydb.core.api.MigrationVersion; +import org.flywaydb.core.api.callback.FlywayCallback; import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.autoconfigure.AutoConfigureAfter; @@ -61,6 +62,7 @@ import org.springframework.util.ObjectUtils; * @author Vedran Pavic * @author Stephane Nicoll * @author Jacques-Etienne Beaudet + * @author Eddú Meléndez * @since 1.1.0 */ @Configuration @@ -92,15 +94,19 @@ public class FlywayAutoConfiguration { private final FlywayMigrationStrategy migrationStrategy; + private FlywayCallback[] flywayCallbacks; + public FlywayConfiguration(FlywayProperties properties, ResourceLoader resourceLoader, ObjectProvider dataSource, @FlywayDataSource ObjectProvider flywayDataSource, - ObjectProvider migrationStrategy) { + ObjectProvider migrationStrategy, + ObjectProvider flywayCallbacks) { this.properties = properties; this.resourceLoader = resourceLoader; this.dataSource = dataSource.getIfUnique(); this.flywayDataSource = flywayDataSource.getIfAvailable(); this.migrationStrategy = migrationStrategy.getIfAvailable(); + this.flywayCallbacks = flywayCallbacks.getIfAvailable(); } @PostConstruct @@ -140,6 +146,9 @@ public class FlywayAutoConfiguration { else { flyway.setDataSource(this.dataSource); } + if (this.flywayCallbacks != null && this.flywayCallbacks.length > 0) { + flyway.setCallbacks(this.flywayCallbacks); + } flyway.setLocations(this.properties.getLocations().toArray(new String[0])); return flyway; } diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/flyway/FlywayAutoConfigurationTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/flyway/FlywayAutoConfigurationTests.java index f01bbe957c..70d3abbeaa 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/flyway/FlywayAutoConfigurationTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/flyway/FlywayAutoConfigurationTests.java @@ -25,6 +25,7 @@ import javax.sql.DataSource; import org.flywaydb.core.Flyway; import org.flywaydb.core.api.MigrationVersion; +import org.flywaydb.core.api.callback.BaseFlywayCallback; import org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform; import org.junit.After; import org.junit.Before; @@ -57,6 +58,7 @@ import static org.assertj.core.api.Assertions.assertThat; * @author Phillip Webb * @author Andy Wilkinson * @author Vedran Pavic + * @author Eddú Meléndez */ public class FlywayAutoConfigurationTests { @@ -202,6 +204,16 @@ public class FlywayAutoConfigurationTests { assertThat(initializer.getOrder()).isEqualTo(Ordered.HIGHEST_PRECEDENCE); } + @Test + public void customFlywayCallback() throws Exception { + registerAndRefresh(EmbeddedDataSourceConfiguration.class, + FlywayAutoConfiguration.class, PropertyPlaceholderAutoConfiguration.class, + MockOneFlywayCallback.class, MockTwoFlywayCallback.class); + assertThat(this.context.getBean(Flyway.class)).isNotNull(); + this.context.getBean(MockOneFlywayCallback.class).assertCalled(); + this.context.getBean(MockTwoFlywayCallback.class).assertCalled(); + } + @Test public void customFlywayWithJpa() throws Exception { registerAndRefresh(CustomFlywayWithJpaConfiguration.class, @@ -325,4 +337,34 @@ public class FlywayAutoConfigurationTests { } + @Component + protected static class MockOneFlywayCallback + extends BaseFlywayCallback { + + private boolean called = false; + + public MockOneFlywayCallback() { + this.called = true; + } + + public void assertCalled() { + assertThat(this.called).isTrue(); + } + } + + @Component + protected static class MockTwoFlywayCallback + extends BaseFlywayCallback { + + private boolean called = false; + + public MockTwoFlywayCallback() { + this.called = true; + } + + public void assertCalled() { + assertThat(this.called).isTrue(); + } + } + } diff --git a/spring-boot-dependencies/pom.xml b/spring-boot-dependencies/pom.xml index f6b56c60f6..6460e1383f 100644 --- a/spring-boot-dependencies/pom.xml +++ b/spring-boot-dependencies/pom.xml @@ -73,7 +73,7 @@ 2.10.3 3.2.0 1.50.5 - 3.2.1 + 4.0.3 2.3.25-incubating 2.4.4 3.0.0