From cc5bd51343ab13b73f0a205ad68983f2b9e79386 Mon Sep 17 00:00:00 2001 From: Alan Gomes Date: Wed, 22 May 2019 17:20:30 -0300 Subject: [PATCH 1/2] Configure FluentConfiguration to use ResourceLoader's ClassLoader See gh-16947 --- .../flyway/FlywayAutoConfiguration.java | 2 +- .../flyway/FlywayAutoConfigurationTests.java | 25 +++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) 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 917c7ff82a..ee15720196 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 @@ -113,7 +113,7 @@ public class FlywayAutoConfiguration { ObjectProvider fluentConfigurationCustomizers, ObjectProvider callbacks, ObjectProvider flywayCallbacks) { - FluentConfiguration configuration = new FluentConfiguration(); + FluentConfiguration configuration = new FluentConfiguration(resourceLoader.getClassLoader()); DataSource dataSourceToMigrate = configureDataSource(configuration, properties, dataSourceProperties, flywayDataSource.getIfAvailable(), dataSource.getIfAvailable()); 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 55746bc6ef..fe009a38fd 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 @@ -36,6 +36,7 @@ import org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform; import org.junit.jupiter.api.Test; import org.mockito.InOrder; +import org.mockito.internal.util.MockUtil; import org.springframework.beans.factory.BeanCreationException; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.autoconfigure.jdbc.EmbeddedDataSourceConfiguration; @@ -48,11 +49,14 @@ import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.core.Ordered; import org.springframework.core.annotation.Order; +import org.springframework.core.io.DefaultResourceLoader; +import org.springframework.core.io.ResourceLoader; import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter; import org.springframework.stereotype.Component; import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.inOrder; @@ -470,6 +474,16 @@ public class FlywayAutoConfigurationTests { }); } + @Test + public void customFlywayClassLoader() { + this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class, + ResourceLoaderConfiguration.class).run((context) -> { + assertThat(context).hasSingleBean(Flyway.class); + Flyway flyway = context.getBean(Flyway.class); + assertTrue(MockUtil.isMock(flyway.getConfiguration().getClassLoader())); + }); + } + @Configuration(proxyBeanMethods = false) protected static class FlywayDataSourceConfiguration { @@ -489,6 +503,17 @@ public class FlywayAutoConfigurationTests { } + @Configuration(proxyBeanMethods = false) + protected static class ResourceLoaderConfiguration { + + @Bean + @Primary + public ResourceLoader customClassLoader() { + return new DefaultResourceLoader(mock(ClassLoader.class)); + } + + } + @Configuration(proxyBeanMethods = false) protected static class CustomFlywayMigrationInitializer { From 69a298231c29f193822749c14a6224ddb1765771 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Wed, 29 May 2019 10:07:26 +0100 Subject: [PATCH 2/2] Polish "Configure FluentConfiguration to use ResourceLoader's ClassLoader" See gh-16947 --- .../flyway/FlywayAutoConfiguration.java | 3 ++- .../flyway/FlywayAutoConfigurationTests.java | 22 +++++++++++++------ 2 files changed, 17 insertions(+), 8 deletions(-) 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 ee15720196..8ee68d3e1c 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 @@ -113,7 +113,8 @@ public class FlywayAutoConfiguration { ObjectProvider fluentConfigurationCustomizers, ObjectProvider callbacks, ObjectProvider flywayCallbacks) { - FluentConfiguration configuration = new FluentConfiguration(resourceLoader.getClassLoader()); + FluentConfiguration configuration = new FluentConfiguration( + resourceLoader.getClassLoader()); DataSource dataSourceToMigrate = configureDataSource(configuration, properties, dataSourceProperties, flywayDataSource.getIfAvailable(), dataSource.getIfAvailable()); 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 fe009a38fd..374484c975 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 @@ -36,7 +36,6 @@ import org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform; import org.junit.jupiter.api.Test; import org.mockito.InOrder; -import org.mockito.internal.util.MockUtil; import org.springframework.beans.factory.BeanCreationException; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.autoconfigure.jdbc.EmbeddedDataSourceConfiguration; @@ -56,7 +55,6 @@ import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter; import org.springframework.stereotype.Component; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.inOrder; @@ -478,10 +476,11 @@ public class FlywayAutoConfigurationTests { public void customFlywayClassLoader() { this.contextRunner.withUserConfiguration(EmbeddedDataSourceConfiguration.class, ResourceLoaderConfiguration.class).run((context) -> { - assertThat(context).hasSingleBean(Flyway.class); - Flyway flyway = context.getBean(Flyway.class); - assertTrue(MockUtil.isMock(flyway.getConfiguration().getClassLoader())); - }); + assertThat(context).hasSingleBean(Flyway.class); + Flyway flyway = context.getBean(Flyway.class); + assertThat(flyway.getConfiguration().getClassLoader()) + .isInstanceOf(CustomClassLoader.class); + }); } @Configuration(proxyBeanMethods = false) @@ -509,7 +508,8 @@ public class FlywayAutoConfigurationTests { @Bean @Primary public ResourceLoader customClassLoader() { - return new DefaultResourceLoader(mock(ClassLoader.class)); + return new DefaultResourceLoader( + new CustomClassLoader(getClass().getClassLoader())); } } @@ -629,4 +629,12 @@ public class FlywayAutoConfigurationTests { } + private static final class CustomClassLoader extends ClassLoader { + + private CustomClassLoader(ClassLoader parent) { + super(parent); + } + + } + }