Commit 5b2caa89 authored by Andy Wilkinson's avatar Andy Wilkinson

Merge pull request #17997 from SammyVimes

* gh-17997:
  Polish "Upgrade to Flyway 6.0.1"
  Upgrade to Flyway 6.0.1

Closes gh-17997
parents 1e2f8959 0e2a131e
...@@ -30,7 +30,6 @@ import javax.sql.DataSource; ...@@ -30,7 +30,6 @@ import javax.sql.DataSource;
import org.flywaydb.core.Flyway; import org.flywaydb.core.Flyway;
import org.flywaydb.core.api.MigrationVersion; import org.flywaydb.core.api.MigrationVersion;
import org.flywaydb.core.api.callback.Callback; import org.flywaydb.core.api.callback.Callback;
import org.flywaydb.core.api.callback.FlywayCallback;
import org.flywaydb.core.api.configuration.FluentConfiguration; import org.flywaydb.core.api.configuration.FluentConfiguration;
import org.springframework.beans.factory.ObjectProvider; import org.springframework.beans.factory.ObjectProvider;
...@@ -81,9 +80,9 @@ import org.springframework.util.StringUtils; ...@@ -81,9 +80,9 @@ import org.springframework.util.StringUtils;
* @author Dominic Gunn * @author Dominic Gunn
* @author Dan Zheng * @author Dan Zheng
* @author András Deák * @author András Deák
* @author Semyon Danilov
* @since 1.1.0 * @since 1.1.0
*/ */
@SuppressWarnings("deprecation")
@Configuration(proxyBeanMethods = false) @Configuration(proxyBeanMethods = false)
@ConditionalOnClass(Flyway.class) @ConditionalOnClass(Flyway.class)
@Conditional(FlywayDataSourceCondition.class) @Conditional(FlywayDataSourceCondition.class)
...@@ -113,7 +112,7 @@ public class FlywayAutoConfiguration { ...@@ -113,7 +112,7 @@ public class FlywayAutoConfiguration {
ResourceLoader resourceLoader, ObjectProvider<DataSource> dataSource, ResourceLoader resourceLoader, ObjectProvider<DataSource> dataSource,
@FlywayDataSource ObjectProvider<DataSource> flywayDataSource, @FlywayDataSource ObjectProvider<DataSource> flywayDataSource,
ObjectProvider<FlywayConfigurationCustomizer> fluentConfigurationCustomizers, ObjectProvider<FlywayConfigurationCustomizer> fluentConfigurationCustomizers,
ObjectProvider<Callback> callbacks, ObjectProvider<FlywayCallback> flywayCallbacks) { ObjectProvider<Callback> callbacks) {
FluentConfiguration configuration = new FluentConfiguration(resourceLoader.getClassLoader()); FluentConfiguration configuration = new FluentConfiguration(resourceLoader.getClassLoader());
DataSource dataSourceToMigrate = configureDataSource(configuration, properties, dataSourceProperties, DataSource dataSourceToMigrate = configureDataSource(configuration, properties, dataSourceProperties,
flywayDataSource.getIfAvailable(), dataSource.getIfAvailable()); flywayDataSource.getIfAvailable(), dataSource.getIfAvailable());
...@@ -122,10 +121,8 @@ public class FlywayAutoConfiguration { ...@@ -122,10 +121,8 @@ public class FlywayAutoConfiguration {
List<Callback> orderedCallbacks = callbacks.orderedStream().collect(Collectors.toList()); List<Callback> orderedCallbacks = callbacks.orderedStream().collect(Collectors.toList());
configureCallbacks(configuration, orderedCallbacks); configureCallbacks(configuration, orderedCallbacks);
fluentConfigurationCustomizers.orderedStream().forEach((customizer) -> customizer.customize(configuration)); fluentConfigurationCustomizers.orderedStream().forEach((customizer) -> customizer.customize(configuration));
Flyway flyway = configuration.load(); configureFlywayCallbacks(configuration, orderedCallbacks);
List<FlywayCallback> orderedFlywayCallbacks = flywayCallbacks.orderedStream().collect(Collectors.toList()); return configuration.load();
configureFlywayCallbacks(flyway, orderedCallbacks, orderedFlywayCallbacks);
return flyway;
} }
private DataSource configureDataSource(FluentConfiguration configuration, FlywayProperties properties, private DataSource configureDataSource(FluentConfiguration configuration, FlywayProperties properties,
...@@ -168,6 +165,7 @@ public class FlywayAutoConfiguration { ...@@ -168,6 +165,7 @@ public class FlywayAutoConfiguration {
map.from(properties.getConnectRetries()).to(configuration::connectRetries); map.from(properties.getConnectRetries()).to(configuration::connectRetries);
map.from(properties.getSchemas()).as(StringUtils::toStringArray).to(configuration::schemas); map.from(properties.getSchemas()).as(StringUtils::toStringArray).to(configuration::schemas);
map.from(properties.getTable()).to(configuration::table); map.from(properties.getTable()).to(configuration::table);
map.from(properties.getTablespace()).to(configuration::tablespace);
map.from(properties.getBaselineDescription()).to(configuration::baselineDescription); map.from(properties.getBaselineDescription()).to(configuration::baselineDescription);
map.from(properties.getBaselineVersion()).to(configuration::baselineVersion); map.from(properties.getBaselineVersion()).to(configuration::baselineVersion);
map.from(properties.getInstalledBy()).to(configuration::installedBy); map.from(properties.getInstalledBy()).to(configuration::installedBy);
...@@ -200,6 +198,7 @@ public class FlywayAutoConfiguration { ...@@ -200,6 +198,7 @@ public class FlywayAutoConfiguration {
map.from(properties.getErrorOverrides()).whenNonNull().to(configuration::errorOverrides); map.from(properties.getErrorOverrides()).whenNonNull().to(configuration::errorOverrides);
map.from(properties.getLicenseKey()).whenNonNull().to(configuration::licenseKey); map.from(properties.getLicenseKey()).whenNonNull().to(configuration::licenseKey);
map.from(properties.getOracleSqlplus()).whenNonNull().to(configuration::oracleSqlplus); map.from(properties.getOracleSqlplus()).whenNonNull().to(configuration::oracleSqlplus);
map.from(properties.getOracleSqlplusWarn()).whenNonNull().to(configuration::oracleSqlplusWarn);
map.from(properties.getStream()).whenNonNull().to(configuration::stream); map.from(properties.getStream()).whenNonNull().to(configuration::stream);
map.from(properties.getUndoSqlMigrationPrefix()).whenNonNull().to(configuration::undoSqlMigrationPrefix); map.from(properties.getUndoSqlMigrationPrefix()).whenNonNull().to(configuration::undoSqlMigrationPrefix);
} }
...@@ -210,14 +209,9 @@ public class FlywayAutoConfiguration { ...@@ -210,14 +209,9 @@ public class FlywayAutoConfiguration {
} }
} }
private void configureFlywayCallbacks(Flyway flyway, List<Callback> callbacks, private void configureFlywayCallbacks(FluentConfiguration flyway, List<Callback> callbacks) {
List<FlywayCallback> flywayCallbacks) { if (!callbacks.isEmpty()) {
if (!flywayCallbacks.isEmpty()) { flyway.callbacks(callbacks.toArray(new Callback[0]));
if (!callbacks.isEmpty()) {
throw new IllegalStateException("Found a mixture of Callback and FlywayCallback beans."
+ " One type must be used exclusively.");
}
flyway.setCallbacks(flywayCallbacks.toArray(new FlywayCallback[0]));
} }
} }
......
...@@ -74,6 +74,13 @@ public class FlywayProperties { ...@@ -74,6 +74,13 @@ public class FlywayProperties {
*/ */
private String table = "flyway_schema_history"; private String table = "flyway_schema_history";
/**
* Tablespace in which the schema history table is created. Ignored when using a
* database that does not support tablespaces. Defaults to the default tablespace of
* the connection used by Flyway.
*/
private String tablespace;
/** /**
* Description to tag an existing schema with when applying a baseline. * Description to tag an existing schema with when applying a baseline.
*/ */
...@@ -252,6 +259,12 @@ public class FlywayProperties { ...@@ -252,6 +259,12 @@ public class FlywayProperties {
*/ */
private Boolean oracleSqlplus; private Boolean oracleSqlplus;
/**
* Whether to issue a warning rather than an error when a not-yet-supported Oracle
* SQL*Plus statement is encountered. Requires Flyway Pro or Flyway Enterprise.
*/
private Boolean oracleSqlplusWarn;
/** /**
* Whether to stream SQL migrations when executing them. Requires Flyway Pro or Flyway * Whether to stream SQL migrations when executing them. Requires Flyway Pro or Flyway
* Enterprise. * Enterprise.
...@@ -319,6 +332,14 @@ public class FlywayProperties { ...@@ -319,6 +332,14 @@ public class FlywayProperties {
this.table = table; this.table = table;
} }
public String getTablespace() {
return this.tablespace;
}
public void setTablespace(String tablespace) {
this.tablespace = tablespace;
}
public String getBaselineDescription() { public String getBaselineDescription() {
return this.baselineDescription; return this.baselineDescription;
} }
...@@ -595,6 +616,14 @@ public class FlywayProperties { ...@@ -595,6 +616,14 @@ public class FlywayProperties {
this.oracleSqlplus = oracleSqlplus; this.oracleSqlplus = oracleSqlplus;
} }
public Boolean getOracleSqlplusWarn() {
return this.oracleSqlplusWarn;
}
public void setOracleSqlplusWarn(Boolean oracleSqlplusWarn) {
this.oracleSqlplusWarn = oracleSqlplusWarn;
}
public Boolean getStream() { public Boolean getStream() {
return this.stream; return this.stream;
} }
......
...@@ -16,7 +16,6 @@ ...@@ -16,7 +16,6 @@
package org.springframework.boot.autoconfigure.flyway; package org.springframework.boot.autoconfigure.flyway;
import java.sql.Connection;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
...@@ -30,7 +29,6 @@ import org.flywaydb.core.api.MigrationVersion; ...@@ -30,7 +29,6 @@ import org.flywaydb.core.api.MigrationVersion;
import org.flywaydb.core.api.callback.Callback; import org.flywaydb.core.api.callback.Callback;
import org.flywaydb.core.api.callback.Context; import org.flywaydb.core.api.callback.Context;
import org.flywaydb.core.api.callback.Event; import org.flywaydb.core.api.callback.Event;
import org.flywaydb.core.api.callback.FlywayCallback;
import org.flywaydb.core.internal.license.FlywayProUpgradeRequiredException; import org.flywaydb.core.internal.license.FlywayProUpgradeRequiredException;
import org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform; import org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
...@@ -72,7 +70,6 @@ import static org.mockito.Mockito.mock; ...@@ -72,7 +70,6 @@ import static org.mockito.Mockito.mock;
* @author Dominic Gunn * @author Dominic Gunn
* @author András Deák * @author András Deák
*/ */
@SuppressWarnings("deprecation")
class FlywayAutoConfigurationTests { class FlywayAutoConfigurationTests {
private ApplicationContextRunner contextRunner = new ApplicationContextRunner() private ApplicationContextRunner contextRunner = new ApplicationContextRunner()
...@@ -89,7 +86,7 @@ class FlywayAutoConfigurationTests { ...@@ -89,7 +86,7 @@ class FlywayAutoConfigurationTests {
this.contextRunner.withPropertyValues("spring.flyway.url:jdbc:hsqldb:mem:" + UUID.randomUUID()) this.contextRunner.withPropertyValues("spring.flyway.url:jdbc:hsqldb:mem:" + UUID.randomUUID())
.run((context) -> { .run((context) -> {
assertThat(context).hasSingleBean(Flyway.class); assertThat(context).hasSingleBean(Flyway.class);
assertThat(context.getBean(Flyway.class).getDataSource()).isNotNull(); assertThat(context.getBean(Flyway.class).getConfiguration().getDataSource()).isNotNull();
}); });
} }
...@@ -98,7 +95,7 @@ class FlywayAutoConfigurationTests { ...@@ -98,7 +95,7 @@ class FlywayAutoConfigurationTests {
this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class) this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class)
.withPropertyValues("spring.flyway.url:jdbc:hsqldb:mem:flywaytest").run((context) -> { .withPropertyValues("spring.flyway.url:jdbc:hsqldb:mem:flywaytest").run((context) -> {
assertThat(context).hasSingleBean(Flyway.class); assertThat(context).hasSingleBean(Flyway.class);
assertThat(context.getBean(Flyway.class).getDataSource()).isNotNull(); assertThat(context.getBean(Flyway.class).getConfiguration().getDataSource()).isNotNull();
}); });
} }
...@@ -109,7 +106,7 @@ class FlywayAutoConfigurationTests { ...@@ -109,7 +106,7 @@ class FlywayAutoConfigurationTests {
"spring.flyway.user:sa") "spring.flyway.user:sa")
.run((context) -> { .run((context) -> {
assertThat(context).hasSingleBean(Flyway.class); assertThat(context).hasSingleBean(Flyway.class);
assertThat(context.getBean(Flyway.class).getDataSource()).isNotNull(); assertThat(context.getBean(Flyway.class).getConfiguration().getDataSource()).isNotNull();
}); });
} }
...@@ -118,7 +115,7 @@ class FlywayAutoConfigurationTests { ...@@ -118,7 +115,7 @@ class FlywayAutoConfigurationTests {
this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class) this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class)
.withPropertyValues("spring.flyway.url:jdbc:hsqldb:mem:flywaytest").run((context) -> { .withPropertyValues("spring.flyway.url:jdbc:hsqldb:mem:flywaytest").run((context) -> {
assertThat(context).hasSingleBean(Flyway.class); assertThat(context).hasSingleBean(Flyway.class);
DataSource dataSource = context.getBean(Flyway.class).getDataSource(); DataSource dataSource = context.getBean(Flyway.class).getConfiguration().getDataSource();
assertThat(dataSource).isNotNull(); assertThat(dataSource).isNotNull();
assertThat(dataSource).hasFieldOrPropertyWithValue("user", "sa"); assertThat(dataSource).hasFieldOrPropertyWithValue("user", "sa");
assertThat(dataSource).hasFieldOrPropertyWithValue("password", ""); assertThat(dataSource).hasFieldOrPropertyWithValue("password", "");
...@@ -130,7 +127,7 @@ class FlywayAutoConfigurationTests { ...@@ -130,7 +127,7 @@ class FlywayAutoConfigurationTests {
this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class) this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class)
.withPropertyValues("spring.flyway.user:sa").run((context) -> { .withPropertyValues("spring.flyway.user:sa").run((context) -> {
assertThat(context).hasSingleBean(Flyway.class); assertThat(context).hasSingleBean(Flyway.class);
DataSource dataSource = context.getBean(Flyway.class).getDataSource(); DataSource dataSource = context.getBean(Flyway.class).getConfiguration().getDataSource();
assertThat(dataSource).isNotNull(); assertThat(dataSource).isNotNull();
assertThat(dataSource).extracting("url").asString().startsWith("jdbc:h2:mem:"); assertThat(dataSource).extracting("url").asString().startsWith("jdbc:h2:mem:");
}); });
...@@ -142,7 +139,7 @@ class FlywayAutoConfigurationTests { ...@@ -142,7 +139,7 @@ class FlywayAutoConfigurationTests {
.withUserConfiguration(FlywayDataSourceConfiguration.class, EmbeddedDataSourceConfiguration.class) .withUserConfiguration(FlywayDataSourceConfiguration.class, EmbeddedDataSourceConfiguration.class)
.run((context) -> { .run((context) -> {
assertThat(context).hasSingleBean(Flyway.class); assertThat(context).hasSingleBean(Flyway.class);
assertThat(context.getBean(Flyway.class).getDataSource()) assertThat(context.getBean(Flyway.class).getConfiguration().getDataSource())
.isEqualTo(context.getBean("flywayDataSource")); .isEqualTo(context.getBean("flywayDataSource"));
}); });
} }
...@@ -151,7 +148,8 @@ class FlywayAutoConfigurationTests { ...@@ -151,7 +148,8 @@ class FlywayAutoConfigurationTests {
void flywayDataSourceWithoutDataSourceAutoConfiguration() { void flywayDataSourceWithoutDataSourceAutoConfiguration() {
this.contextRunner.withUserConfiguration(FlywayDataSourceConfiguration.class).run((context) -> { this.contextRunner.withUserConfiguration(FlywayDataSourceConfiguration.class).run((context) -> {
assertThat(context).hasSingleBean(Flyway.class); assertThat(context).hasSingleBean(Flyway.class);
assertThat(context.getBean(Flyway.class).getDataSource()).isEqualTo(context.getBean("flywayDataSource")); assertThat(context.getBean(Flyway.class).getConfiguration().getDataSource())
.isEqualTo(context.getBean("flywayDataSource"));
}); });
} }
...@@ -175,7 +173,8 @@ class FlywayAutoConfigurationTests { ...@@ -175,7 +173,8 @@ class FlywayAutoConfigurationTests {
this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class).run((context) -> { this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class).run((context) -> {
assertThat(context).hasSingleBean(Flyway.class); assertThat(context).hasSingleBean(Flyway.class);
Flyway flyway = context.getBean(Flyway.class); Flyway flyway = context.getBean(Flyway.class);
assertThat(flyway.getLocations()).containsExactly(new Location("classpath:db/migration")); assertThat(flyway.getConfiguration().getLocations())
.containsExactly(new Location("classpath:db/migration"));
}); });
} }
...@@ -186,8 +185,8 @@ class FlywayAutoConfigurationTests { ...@@ -186,8 +185,8 @@ class FlywayAutoConfigurationTests {
.run((context) -> { .run((context) -> {
assertThat(context).hasSingleBean(Flyway.class); assertThat(context).hasSingleBean(Flyway.class);
Flyway flyway = context.getBean(Flyway.class); Flyway flyway = context.getBean(Flyway.class);
assertThat(flyway.getLocations()).containsExactly(new Location("classpath:db/changelog"), assertThat(flyway.getConfiguration().getLocations()).containsExactly(
new Location("classpath:db/migration")); new Location("classpath:db/changelog"), new Location("classpath:db/migration"));
}); });
} }
...@@ -199,8 +198,8 @@ class FlywayAutoConfigurationTests { ...@@ -199,8 +198,8 @@ class FlywayAutoConfigurationTests {
.run((context) -> { .run((context) -> {
assertThat(context).hasSingleBean(Flyway.class); assertThat(context).hasSingleBean(Flyway.class);
Flyway flyway = context.getBean(Flyway.class); Flyway flyway = context.getBean(Flyway.class);
assertThat(flyway.getLocations()).containsExactly(new Location("classpath:db/changelog"), assertThat(flyway.getConfiguration().getLocations()).containsExactly(
new Location("classpath:db/migration")); new Location("classpath:db/changelog"), new Location("classpath:db/migration"));
}); });
} }
...@@ -210,7 +209,7 @@ class FlywayAutoConfigurationTests { ...@@ -210,7 +209,7 @@ class FlywayAutoConfigurationTests {
.withPropertyValues("spring.flyway.schemas:public").run((context) -> { .withPropertyValues("spring.flyway.schemas:public").run((context) -> {
assertThat(context).hasSingleBean(Flyway.class); assertThat(context).hasSingleBean(Flyway.class);
Flyway flyway = context.getBean(Flyway.class); Flyway flyway = context.getBean(Flyway.class);
assertThat(Arrays.asList(flyway.getSchemas()).toString()).isEqualTo("[public]"); assertThat(Arrays.asList(flyway.getConfiguration().getSchemas()).toString()).isEqualTo("[public]");
}); });
} }
...@@ -289,7 +288,8 @@ class FlywayAutoConfigurationTests { ...@@ -289,7 +288,8 @@ class FlywayAutoConfigurationTests {
.withPropertyValues("spring.flyway.baseline-version=0").run((context) -> { .withPropertyValues("spring.flyway.baseline-version=0").run((context) -> {
assertThat(context).hasSingleBean(Flyway.class); assertThat(context).hasSingleBean(Flyway.class);
Flyway flyway = context.getBean(Flyway.class); Flyway flyway = context.getBean(Flyway.class);
assertThat(flyway.getBaselineVersion()).isEqualTo(MigrationVersion.fromVersion("0")); assertThat(flyway.getConfiguration().getBaselineVersion())
.isEqualTo(MigrationVersion.fromVersion("0"));
}); });
} }
...@@ -299,7 +299,8 @@ class FlywayAutoConfigurationTests { ...@@ -299,7 +299,8 @@ class FlywayAutoConfigurationTests {
.withPropertyValues("spring.flyway.baseline-version=1").run((context) -> { .withPropertyValues("spring.flyway.baseline-version=1").run((context) -> {
assertThat(context).hasSingleBean(Flyway.class); assertThat(context).hasSingleBean(Flyway.class);
Flyway flyway = context.getBean(Flyway.class); Flyway flyway = context.getBean(Flyway.class);
assertThat(flyway.getBaselineVersion()).isEqualTo(MigrationVersion.fromVersion("1")); assertThat(flyway.getConfiguration().getBaselineVersion())
.isEqualTo(MigrationVersion.fromVersion("1"));
}); });
} }
...@@ -310,8 +311,8 @@ class FlywayAutoConfigurationTests { ...@@ -310,8 +311,8 @@ class FlywayAutoConfigurationTests {
.run((context) -> { .run((context) -> {
assertThat(context).hasSingleBean(Flyway.class); assertThat(context).hasSingleBean(Flyway.class);
Flyway flyway = context.getBean(Flyway.class); Flyway flyway = context.getBean(Flyway.class);
assertThat(flyway.getLocations()).containsExactlyInAnyOrder(new Location("classpath:db/vendors/h2"), assertThat(flyway.getConfiguration().getLocations()).containsExactlyInAnyOrder(
new Location("classpath:db/changelog")); new Location("classpath:db/vendors/h2"), new Location("classpath:db/changelog"));
}); });
} }
...@@ -321,7 +322,8 @@ class FlywayAutoConfigurationTests { ...@@ -321,7 +322,8 @@ class FlywayAutoConfigurationTests {
.withPropertyValues("spring.flyway.locations=classpath:db/vendors/{vendor}").run((context) -> { .withPropertyValues("spring.flyway.locations=classpath:db/vendors/{vendor}").run((context) -> {
assertThat(context).hasSingleBean(Flyway.class); assertThat(context).hasSingleBean(Flyway.class);
Flyway flyway = context.getBean(Flyway.class); Flyway flyway = context.getBean(Flyway.class);
assertThat(flyway.getLocations()).containsExactly(new Location("classpath:db/vendors/h2")); assertThat(flyway.getConfiguration().getLocations())
.containsExactly(new Location("classpath:db/vendors/h2"));
}); });
} }
...@@ -333,41 +335,14 @@ class FlywayAutoConfigurationTests { ...@@ -333,41 +335,14 @@ class FlywayAutoConfigurationTests {
Flyway flyway = context.getBean(Flyway.class); Flyway flyway = context.getBean(Flyway.class);
Callback callbackOne = context.getBean("callbackOne", Callback.class); Callback callbackOne = context.getBean("callbackOne", Callback.class);
Callback callbackTwo = context.getBean("callbackTwo", Callback.class); Callback callbackTwo = context.getBean("callbackTwo", Callback.class);
assertThat(flyway.getCallbacks()).hasSize(2); assertThat(flyway.getConfiguration().getCallbacks()).hasSize(2);
assertThat(flyway.getCallbacks()).containsExactly(callbackTwo, callbackOne); assertThat(flyway.getConfiguration().getCallbacks()).containsExactly(callbackTwo, callbackOne);
InOrder orderedCallbacks = inOrder(callbackOne, callbackTwo); InOrder orderedCallbacks = inOrder(callbackOne, callbackTwo);
orderedCallbacks.verify(callbackTwo).handle(any(Event.class), any(Context.class)); orderedCallbacks.verify(callbackTwo).handle(any(Event.class), any(Context.class));
orderedCallbacks.verify(callbackOne).handle(any(Event.class), any(Context.class)); orderedCallbacks.verify(callbackOne).handle(any(Event.class), any(Context.class));
}); });
} }
@Test
void legacyCallbacksAreConfiguredAndOrdered() {
this.contextRunner
.withUserConfiguration(EmbeddedDataSourceConfiguration.class, LegacyCallbackConfiguration.class)
.run((context) -> {
assertThat(context).hasSingleBean(Flyway.class);
Flyway flyway = context.getBean(Flyway.class);
FlywayCallback callbackOne = context.getBean("legacyCallbackOne", FlywayCallback.class);
FlywayCallback callbackTwo = context.getBean("legacyCallbackTwo", FlywayCallback.class);
assertThat(flyway.getCallbacks()).hasSize(2);
InOrder orderedCallbacks = inOrder(callbackOne, callbackTwo);
orderedCallbacks.verify(callbackTwo).beforeMigrate(any(Connection.class));
orderedCallbacks.verify(callbackOne).beforeMigrate(any(Connection.class));
});
}
@Test
void callbacksAndLegacyCallbacksCannotBeMixed() {
this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class,
LegacyCallbackConfiguration.class, CallbackConfiguration.class).run((context) -> {
assertThat(context).hasFailed();
assertThat(context.getStartupFailure())
.hasMessageContaining("Found a mixture of Callback and FlywayCallback beans."
+ " One type must be used exclusively.");
});
}
@Test @Test
void configurationCustomizersAreConfiguredAndOrdered() { void configurationCustomizersAreConfiguredAndOrdered() {
this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class, this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class,
...@@ -435,6 +410,17 @@ class FlywayAutoConfigurationTests { ...@@ -435,6 +410,17 @@ class FlywayAutoConfigurationTests {
}); });
} }
@Test
void oracleSqlplusWarnIsCorrectlyMapped() {
this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class)
.withPropertyValues("spring.flyway.oracle-sqlplus-warn=true").run((context) -> {
assertThat(context).hasFailed();
Throwable failure = context.getStartupFailure();
assertThat(failure).hasRootCauseInstanceOf(FlywayProUpgradeRequiredException.class);
assertThat(failure).hasMessageContaining(" oracle.sqlplusWarn ");
});
}
@Test @Test
void streamIsCorrectlyMapped() { void streamIsCorrectlyMapped() {
this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class) this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class)
...@@ -519,7 +505,7 @@ class FlywayAutoConfigurationTests { ...@@ -519,7 +505,7 @@ class FlywayAutoConfigurationTests {
@Bean @Bean
Flyway flyway() { Flyway flyway() {
return new Flyway(); return Flyway.configure().load();
} }
@Bean @Bean
...@@ -572,23 +558,6 @@ class FlywayAutoConfigurationTests { ...@@ -572,23 +558,6 @@ class FlywayAutoConfigurationTests {
} }
@Configuration(proxyBeanMethods = false)
static class LegacyCallbackConfiguration {
@Bean
@Order(1)
FlywayCallback legacyCallbackOne() {
return mock(FlywayCallback.class);
}
@Bean
@Order(0)
FlywayCallback legacyCallbackTwo() {
return mock(FlywayCallback.class);
}
}
@Configuration(proxyBeanMethods = false) @Configuration(proxyBeanMethods = false)
static class ConfigurationCustomizerConfiguration { static class ConfigurationCustomizerConfiguration {
......
...@@ -96,7 +96,7 @@ class FlywayPropertiesTests { ...@@ -96,7 +96,7 @@ class FlywayPropertiesTests {
ignoreProperties(properties, "url", "user", "password", "enabled", "checkLocation", "createDataSource"); ignoreProperties(properties, "url", "user", "password", "enabled", "checkLocation", "createDataSource");
// High level object we can't set with properties // High level object we can't set with properties
ignoreProperties(configuration, "classLoader", "dataSource", "resolvers", "callbacks"); ignoreProperties(configuration, "callbacks", "classLoader", "dataSource", "javaMigrations", "resolvers");
// Properties we don't want to expose // Properties we don't want to expose
ignoreProperties(configuration, "resolversAsClassNames", "callbacksAsClassNames"); ignoreProperties(configuration, "resolversAsClassNames", "callbacksAsClassNames");
// Handled by the conversion service // Handled by the conversion service
...@@ -107,8 +107,6 @@ class FlywayPropertiesTests { ...@@ -107,8 +107,6 @@ class FlywayPropertiesTests {
ignoreProperties(properties, "initSqls"); ignoreProperties(properties, "initSqls");
// Handled as dryRunOutput // Handled as dryRunOutput
ignoreProperties(configuration, "dryRunOutputAsFile", "dryRunOutputAsFileName"); ignoreProperties(configuration, "dryRunOutputAsFile", "dryRunOutputAsFileName");
// Deprecated
ignoreProperties(configuration, "errorHandlers", "errorHandlersAsClassNames");
List<String> configurationKeys = new ArrayList<>(configuration.keySet()); List<String> configurationKeys = new ArrayList<>(configuration.keySet());
Collections.sort(configurationKeys); Collections.sort(configurationKeys);
List<String> propertiesKeys = new ArrayList<>(properties.keySet()); List<String> propertiesKeys = new ArrayList<>(properties.keySet());
......
...@@ -60,7 +60,7 @@ ...@@ -60,7 +60,7 @@
<ehcache.version>2.10.6</ehcache.version> <ehcache.version>2.10.6</ehcache.version>
<ehcache3.version>3.8.0</ehcache3.version> <ehcache3.version>3.8.0</ehcache3.version>
<embedded-mongo.version>2.2.0</embedded-mongo.version> <embedded-mongo.version>2.2.0</embedded-mongo.version>
<flyway.version>5.2.4</flyway.version> <flyway.version>6.0.1</flyway.version>
<freemarker.version>2.3.28</freemarker.version> <freemarker.version>2.3.28</freemarker.version>
<elasticsearch.version>6.8.2</elasticsearch.version> <elasticsearch.version>6.8.2</elasticsearch.version>
<glassfish-el.version>3.0.2</glassfish-el.version> <glassfish-el.version>3.0.2</glassfish-el.version>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment