From e9cd0c1f3a13e1b7dde1d4e8622b0b161bb3ea8c Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Mon, 5 Jun 2023 20:48:46 +0100 Subject: [PATCH] Restore compatibility with Flyway 9.0.x Closes gh-35721 --- .../flyway/FlywayAutoConfiguration.java | 12 ++++- .../Flyway90AutoConfigurationTests.java | 54 +++++++++++++++++++ 2 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/flyway/Flyway90AutoConfigurationTests.java 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 176b48162c..3b9294ce6f 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 @@ -245,7 +245,7 @@ public class FlywayAutoConfiguration { .to((prefix) -> configuration.scriptPlaceholderPrefix(prefix)); map.from(properties.getScriptPlaceholderSuffix()) .to((suffix) -> configuration.scriptPlaceholderSuffix(suffix)); - map.from(properties.isExecuteInTransaction()).to(configuration::executeInTransaction); + configureExecuteInTransaction(configuration, properties, map); map.from(properties::getLoggers).to(configuration::loggers); // Flyway Teams properties map.from(properties.getBatch()).to(configuration::batch); @@ -273,6 +273,16 @@ public class FlywayAutoConfiguration { map.from(properties.getDetectEncoding()).to(configuration::detectEncoding); } + private void configureExecuteInTransaction(FluentConfiguration configuration, FlywayProperties properties, + PropertyMapper map) { + try { + map.from(properties.isExecuteInTransaction()).to(configuration::executeInTransaction); + } + catch (NoSuchMethodError ex) { + // Flyway < 9.14 + } + } + private void configureSqlServerKerberosLoginFile(FluentConfiguration configuration, String sqlServerKerberosLoginFile) { SQLServerConfigurationExtension sqlServerConfigurationExtension = configuration.getPluginRegister() diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/flyway/Flyway90AutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/flyway/Flyway90AutoConfigurationTests.java new file mode 100644 index 0000000000..6acaa1851e --- /dev/null +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/flyway/Flyway90AutoConfigurationTests.java @@ -0,0 +1,54 @@ +/* + * Copyright 2012-2023 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 java.util.UUID; + +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.DataSourceAutoConfiguration; +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 9.0.x. + * + * @author Andy Wilkinson + */ +@ClassPathOverrides("org.flywaydb:flyway-core:9.0.4") +class Flyway90AutoConfigurationTests { + + private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() + .withConfiguration(AutoConfigurations.of(FlywayAutoConfiguration.class)) + .withPropertyValues("spring.datasource.url:jdbc:hsqldb:mem:" + UUID.randomUUID()); + + @Test + void flywayCanBeAutoConfigured() { + this.contextRunner.withUserConfiguration(DataSourceAutoConfiguration.class).run((context) -> { + assertThat(context).hasSingleBean(Flyway.class); + Flyway flyway = context.getBean(Flyway.class); + assertThat(flyway.getConfiguration().getLocations()) + .containsExactly(new Location("classpath:db/migration")); + }); + } + +}