diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/MultipartAutoConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/MultipartAutoConfiguration.java index 64ffce4ed29..ab7b58f78d2 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/MultipartAutoConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/MultipartAutoConfiguration.java @@ -28,6 +28,7 @@ import org.springframework.boot.context.embedded.EmbeddedWebApplicationContext; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.web.multipart.MultipartResolver; import org.springframework.web.multipart.support.StandardServletMultipartResolver; /** @@ -60,7 +61,7 @@ public class MultipartAutoConfiguration { } @Bean - @ConditionalOnMissingBean + @ConditionalOnMissingBean(value = MultipartResolver.class) public StandardServletMultipartResolver multipartResolver() { return new StandardServletMultipartResolver(); } diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/security/jpa/JpaUserDetailsTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/security/jpa/JpaUserDetailsTests.java index 76d923ce341..6c2aa8fb5b1 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/security/jpa/JpaUserDetailsTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/security/jpa/JpaUserDetailsTests.java @@ -21,12 +21,14 @@ import org.junit.runner.RunWith; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.boot.autoconfigure.jdbc.EmbeddedDataSourceConfiguration; import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration; import org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration; import org.springframework.boot.autoconfigure.security.user.SecurityConfig; import org.springframework.boot.test.SpringApplicationConfiguration; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Import; +import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; /** @@ -39,6 +41,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; */ @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = JpaUserDetailsTests.Main.class) +@DirtiesContext public class JpaUserDetailsTests { @Test @@ -49,7 +52,8 @@ public class JpaUserDetailsTests { SpringApplication.run(Main.class, args); } - @Import({ DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class, + @Import({ EmbeddedDataSourceConfiguration.class, DataSourceAutoConfiguration.class, + HibernateJpaAutoConfiguration.class, PropertyPlaceholderAutoConfiguration.class, SecurityAutoConfiguration.class }) @ComponentScan(basePackageClasses = SecurityConfig.class) public static class Main { diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/MultipartAutoConfigurationTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/MultipartAutoConfigurationTests.java index 11e0de93947..3d047230d7b 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/MultipartAutoConfigurationTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/MultipartAutoConfigurationTests.java @@ -39,11 +39,14 @@ import org.springframework.web.servlet.DispatcherServlet; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.instanceOf; +import static org.hamcrest.Matchers.not; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertThat; +import static org.mockito.Mockito.mock; /** * Tests for {@link MultipartAutoConfiguration}. Tests an empty configuration, no @@ -165,6 +168,16 @@ public class MultipartAutoConfigurationTests { assertEquals(0, this.context.getBeansOfType(MultipartConfigElement.class).size()); } + @Test + public void containerWithCustomMulipartResolver() throws Exception { + this.context = new AnnotationConfigEmbeddedWebApplicationContext( + ContainerWithCustomMultipartResolver.class, BaseConfiguration.class); + MultipartResolver multipartResolver = this.context + .getBean(MultipartResolver.class); + assertThat(multipartResolver, + not(instanceOf(StandardServletMultipartResolver.class))); + } + private void verifyServletWorks() { RestTemplate restTemplate = new RestTemplate(); assertEquals("Hello", restTemplate.getForObject("http://localhost:" @@ -243,6 +256,15 @@ public class MultipartAutoConfigurationTests { } + public static class ContainerWithCustomMultipartResolver { + + @Bean + MultipartResolver multipartResolver() { + return mock(MultipartResolver.class); + } + + } + @Controller public static class WebController {