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 fed305307491..a8767c57a2af 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 @@ -208,7 +208,6 @@ private void applyConnectionDetails(FlywayConnectionDetails connectionDetails, D * @param configuration the configuration * @param properties the properties */ - @SuppressWarnings("removal") private void configureProperties(FluentConfiguration configuration, FlywayProperties properties) { // NOTE: Using method references in the mapper methods can break // back-compatibility (see gh-38164) @@ -263,8 +262,7 @@ private void configureProperties(FluentConfiguration configuration, FlywayProper map.from(properties.isBaselineOnMigrate()) .to((baselineOnMigrate) -> configuration.baselineOnMigrate(baselineOnMigrate)); map.from(properties.isCleanDisabled()).to((cleanDisabled) -> configuration.cleanDisabled(cleanDisabled)); - map.from(properties.isCleanOnValidationError()) - .to((cleanOnValidationError) -> configuration.cleanOnValidationError(cleanOnValidationError)); + configureCleanOnValidationError(configuration, properties); map.from(properties.isGroup()).to((group) -> configuration.group(group)); map.from(properties.isMixed()).to((mixed) -> configuration.mixed(mixed)); map.from(properties.isOutOfOrder()).to((outOfOrder) -> configuration.outOfOrder(outOfOrder)); @@ -309,6 +307,16 @@ private void configureProperties(FluentConfiguration configuration, FlywayProper .to((detectEncoding) -> configuration.detectEncoding(detectEncoding)); } + @SuppressWarnings("removal") + private void configureCleanOnValidationError(FluentConfiguration configuration, FlywayProperties properties) { + try { + configuration.cleanOnValidationError(properties.isCleanOnValidationError()); + } + catch (NoSuchMethodError ex) { + // Flyway >= 12.0 + } + } + private void configureExecuteInTransaction(FluentConfiguration configuration, FlywayProperties properties, PropertyMapper map) { try { diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/flyway/Flyway120AutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/flyway/Flyway120AutoConfigurationTests.java new file mode 100644 index 000000000000..403f6420f2de --- /dev/null +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/flyway/Flyway120AutoConfigurationTests.java @@ -0,0 +1,52 @@ +/* + * Copyright 2012-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.autoconfigure.flyway; + +import org.flywaydb.core.Flyway; +import org.flywaydb.core.api.Location; +import org.junit.jupiter.api.Test; + +import org.springframework.boot.autoconfigure.AutoConfigurations; +import org.springframework.boot.autoconfigure.jdbc.EmbeddedDataSourceConfiguration; +import org.springframework.boot.test.context.runner.ApplicationContextRunner; +import org.springframework.boot.testsupport.classpath.ClassPathOverrides; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests for {@link FlywayAutoConfiguration} with Flyway 12.0. + * + * @author Dmytro Nosan + */ +@ClassPathOverrides("org.flywaydb:flyway-core:12.0.0") +class Flyway120AutoConfigurationTests { + + private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() + .withConfiguration(AutoConfigurations.of(FlywayAutoConfiguration.class)) + .withPropertyValues("spring.datasource.generate-unique-name=true"); + + @Test + void defaultFlyway() { + this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class).run((context) -> { + assertThat(context).hasSingleBean(Flyway.class); + Flyway flyway = context.getBean(Flyway.class); + assertThat(flyway.getConfiguration().getLocations()) + .containsExactly(new Location("classpath:db/migration")); + }); + } + +}