diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration.java index 25659cd4349..cd866b11b93 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration.java @@ -21,6 +21,7 @@ import java.util.Collection; import java.util.Collections; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.function.Supplier; import java.util.stream.Collectors; @@ -220,6 +221,20 @@ public class FlywayAutoConfiguration { .to((oracleSqlplusWarn) -> configuration.oracleSqlplusWarn(oracleSqlplusWarn)); map.from(properties.getStream()).whenNonNull().to(configuration::stream); map.from(properties.getUndoSqlMigrationPrefix()).whenNonNull().to(configuration::undoSqlMigrationPrefix); + // No method reference for compatibility with Flyway 6.x + map.from(properties.getCherryPick()).whenNonNull().to((cherryPick) -> configuration.cherryPick(cherryPick)); + // No method reference for compatibility with Flyway 6.x + map.from(properties.getJdbcProperties()).whenNot(Map::isEmpty) + .to((jdbcProperties) -> configuration.jdbcProperties(jdbcProperties)); + // No method reference for compatibility with Flyway 6.x + map.from(properties.getOracleKerberosCacheFile()).whenNonNull() + .to((cacheFile) -> configuration.orackeKerberosCacheFile(cacheFile)); + // No method reference for compatibility with Flyway 6.x + map.from(properties.getOracleKerberosConfigFile()).whenNonNull() + .to((configFile) -> configuration.orackeKerberosConfigFile(configFile)); + // No method reference for compatibility with Flyway 6.x + map.from(properties.getSkipExecutingMigrations()).whenNonNull() + .to((skipExecutingMigrations) -> configuration.skipExecutingMigrations(skipExecutingMigrations)); } private void configureCreateSchemas(FluentConfiguration configuration, boolean createSchemas) { diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/flyway/FlywayProperties.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/flyway/FlywayProperties.java index badf48a3ca0..0886f6e5e5f 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/flyway/FlywayProperties.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/flyway/FlywayProperties.java @@ -290,6 +290,33 @@ public class FlywayProperties { */ private String undoSqlMigrationPrefix; + /** + * Migrations that Flyway should consider when migrating or undoing. When empty all + * available migrations are considered. Requires Flyway Teams. + */ + private String[] cherryPick; + + /** + * Properties to pass to the JDBC driver. Requires Flyway Teams. + */ + private Map jdbcProperties = new HashMap<>(); + + /** + * Path of the Oracle Kerberos cache file. Requires Flyway Teams. + */ + private String oracleKerberosCacheFile; + + /** + * Path of the Oracle Kerberos config file. Requires Flyway Teams. + */ + private String oracleKerberosConfigFile; + + /** + * Whether Flyway should skip executing the contents of the migrations and only update + * the schema history table. Requires Flyway teams. + */ + private Boolean skipExecutingMigrations; + public boolean isEnabled() { return this.enabled; } @@ -678,4 +705,44 @@ public class FlywayProperties { this.undoSqlMigrationPrefix = undoSqlMigrationPrefix; } + public String[] getCherryPick() { + return this.cherryPick; + } + + public void setCherryPick(String[] cherryPick) { + this.cherryPick = cherryPick; + } + + public Map getJdbcProperties() { + return this.jdbcProperties; + } + + public void setJdbcProperties(Map jdbcProperties) { + this.jdbcProperties = jdbcProperties; + } + + public String getOracleKerberosCacheFile() { + return this.oracleKerberosCacheFile; + } + + public void setOracleKerberosCacheFile(String oracleKerberosCacheFile) { + this.oracleKerberosCacheFile = oracleKerberosCacheFile; + } + + public String getOracleKerberosConfigFile() { + return this.oracleKerberosConfigFile; + } + + public void setOracleKerberosConfigFile(String oracleKerberosConfigFile) { + this.oracleKerberosConfigFile = oracleKerberosConfigFile; + } + + public Boolean getSkipExecutingMigrations() { + return this.skipExecutingMigrations; + } + + public void setSkipExecutingMigrations(Boolean skipExecutingMigrations) { + this.skipExecutingMigrations = skipExecutingMigrations; + } + } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/flyway/FlywayAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/flyway/FlywayAutoConfigurationTests.java index f260e71bed1..a5432ae0701 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/flyway/FlywayAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/flyway/FlywayAutoConfigurationTests.java @@ -519,6 +519,61 @@ class FlywayAutoConfigurationTests { }); } + @Test + void cherryPickIsCorrectlyMapped() { + this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class) + .withPropertyValues("spring.flyway.cherry-pick=1.1").run((context) -> { + assertThat(context).hasFailed(); + Throwable failure = context.getStartupFailure(); + assertThat(failure).hasRootCauseInstanceOf(FlywayTeamsUpgradeRequiredException.class); + assertThat(failure).hasMessageContaining(" migrations "); + }); + } + + @Test + void jdbcPropertiesAreCorrectlyMapped() { + this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class) + .withPropertyValues("spring.flyway.jdbc-properties.prop=value").run((context) -> { + assertThat(context).hasFailed(); + Throwable failure = context.getStartupFailure(); + assertThat(failure).hasRootCauseInstanceOf(FlywayTeamsUpgradeRequiredException.class); + assertThat(failure).hasMessageContaining(" jdbcProperties "); + }); + } + + @Test + void oracleKerberosCacheFileIsCorrectlyMapped() { + this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class) + .withPropertyValues("spring.flyway.oracle-kerberos-cache-file=/tmp/cache").run((context) -> { + assertThat(context).hasFailed(); + Throwable failure = context.getStartupFailure(); + assertThat(failure).hasRootCauseInstanceOf(FlywayTeamsUpgradeRequiredException.class); + assertThat(failure).hasMessageContaining(" oracle.kerberosCacheFile "); + }); + } + + @Test + void oracleKerberosConfigFileIsCorrectlyMapped() { + this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class) + .withPropertyValues("spring.flyway.oracle-kerberos-config-file=/tmp/config").run((context) -> { + assertThat(context).hasFailed(); + Throwable failure = context.getStartupFailure(); + assertThat(failure).hasRootCauseInstanceOf(FlywayTeamsUpgradeRequiredException.class); + assertThat(failure).hasMessageContaining(" oracle.kerberosConfigFile "); + }); + } + + @Test + void skipExecutingMigrationsIsCorrectlyMapped() { + this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class) + .withPropertyValues("spring.flyway.skip-executing-migrations=true").run((context) -> { + assertThat(context).hasFailed(); + Throwable failure = context.getStartupFailure(); + assertThat(failure).hasRootCauseInstanceOf(FlywayTeamsUpgradeRequiredException.class); + assertThat(failure).hasMessageContaining(" skipExecutingMigrations "); + }); + } + @Configuration(proxyBeanMethods = false) static class FlywayDataSourceConfiguration { diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/flyway/FlywayPropertiesTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/flyway/FlywayPropertiesTests.java index 0ce9a32203e..86dea7df09b 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/flyway/FlywayPropertiesTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/flyway/FlywayPropertiesTests.java @@ -115,9 +115,6 @@ class FlywayPropertiesTests { ignoreProperties(configuration, "shouldCreateSchemas"); // Getters for the DataSource settings rather than actual properties ignoreProperties(configuration, "password", "url", "user"); - // Flyway 7.0 properties that are not yet supported - ignoreProperties(configuration, "cherryPick", "jdbcProperties", "oracleKerberosCacheFile", - "oracleKerberosConfigFile", "skipExecutingMigrations"); List configurationKeys = new ArrayList<>(configuration.keySet()); Collections.sort(configurationKeys); List propertiesKeys = new ArrayList<>(properties.keySet());