Skip to content

Commit 93a6dfd

Browse files
committed
Merge pull request spring-projects#15889 from Jeffrey van der Laan
* spring-projectsgh-15889: Do not auto-configure OEMIV filter when user defines registration bean Closes spring-projectsgh-15889
2 parents 88fd84a + 4f86233 commit 93a6dfd

File tree

2 files changed

+58
-2
lines changed

2 files changed

+58
-2
lines changed

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/orm/jpa/JpaBaseConfiguration.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2012-2018 the original author or authors.
2+
* Copyright 2012-2019 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -39,6 +39,7 @@
3939
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication.Type;
4040
import org.springframework.boot.autoconfigure.domain.EntityScanPackages;
4141
import org.springframework.boot.autoconfigure.transaction.TransactionManagerCustomizers;
42+
import org.springframework.boot.autoconfigure.web.servlet.ConditionalOnMissingFilterBean;
4243
import org.springframework.boot.context.properties.EnableConfigurationProperties;
4344
import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
4445
import org.springframework.context.annotation.Bean;
@@ -211,6 +212,7 @@ public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
211212
@ConditionalOnClass(WebMvcConfigurer.class)
212213
@ConditionalOnMissingBean({ OpenEntityManagerInViewInterceptor.class,
213214
OpenEntityManagerInViewFilter.class })
215+
@ConditionalOnMissingFilterBean(OpenEntityManagerInViewFilter.class)
214216
@ConditionalOnProperty(prefix = "spring.jpa", name = "open-in-view", havingValue = "true", matchIfMissing = true)
215217
protected static class JpaWebConfiguration {
216218

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/orm/jpa/AbstractJpaAutoConfigurationTests.java

Lines changed: 55 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2012-2017 the original author or authors.
2+
* Copyright 2012-2019 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -38,6 +38,7 @@
3838
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
3939
import org.springframework.boot.test.context.runner.ContextConsumer;
4040
import org.springframework.boot.test.context.runner.WebApplicationContextRunner;
41+
import org.springframework.boot.web.servlet.FilterRegistrationBean;
4142
import org.springframework.context.annotation.Bean;
4243
import org.springframework.context.annotation.Configuration;
4344
import org.springframework.context.annotation.Primary;
@@ -159,6 +160,32 @@ public void openEntityManagerInViewInterceptorIsNotRegisteredWhenFilterPresent()
159160
.doesNotHaveBean(OpenEntityManagerInViewInterceptor.class));
160161
}
161162

163+
@Test
164+
public void openEntityManagerInViewInterceptorIsNotRegisteredWhenFilterRegistrationPresent() {
165+
new WebApplicationContextRunner()
166+
.withPropertyValues("spring.datasource.generate-unique-name=true")
167+
.withUserConfiguration(TestFilterRegistrationConfiguration.class)
168+
.withConfiguration(AutoConfigurations.of(
169+
DataSourceAutoConfiguration.class,
170+
TransactionAutoConfiguration.class, this.autoConfiguredClass))
171+
.run((context) -> assertThat(context)
172+
.doesNotHaveBean(OpenEntityManagerInViewInterceptor.class));
173+
}
174+
175+
@Test
176+
public void openEntityManagerInViewInterceptorAutoConfigurationBacksOffWhenManuallyRegistered() {
177+
new WebApplicationContextRunner()
178+
.withPropertyValues("spring.datasource.generate-unique-name=true")
179+
.withUserConfiguration(TestInterceptorManualConfiguration.class)
180+
.withConfiguration(AutoConfigurations.of(
181+
DataSourceAutoConfiguration.class,
182+
TransactionAutoConfiguration.class, this.autoConfiguredClass))
183+
.run((context) -> assertThat(context)
184+
.getBean(OpenEntityManagerInViewInterceptor.class)
185+
.isExactlyInstanceOf(
186+
TestInterceptorManualConfiguration.ManualOpenEntityManagerInViewInterceptor.class));
187+
}
188+
162189
@Test
163190
public void openEntityManagerInViewInterceptorISNotRegisteredWhenExplicitlyOff() {
164191
new WebApplicationContextRunner()
@@ -298,6 +325,33 @@ public OpenEntityManagerInViewFilter openEntityManagerInViewFilter() {
298325

299326
}
300327

328+
@Configuration
329+
@TestAutoConfigurationPackage(City.class)
330+
protected static class TestFilterRegistrationConfiguration {
331+
332+
@Bean
333+
public FilterRegistrationBean<OpenEntityManagerInViewFilter> OpenEntityManagerInViewFilterFilterRegistrationBean() {
334+
return new FilterRegistrationBean<>();
335+
}
336+
337+
}
338+
339+
@Configuration
340+
@TestAutoConfigurationPackage(City.class)
341+
protected static class TestInterceptorManualConfiguration {
342+
343+
@Bean
344+
public OpenEntityManagerInViewInterceptor openEntityManagerInViewInterceptor() {
345+
return new ManualOpenEntityManagerInViewInterceptor();
346+
}
347+
348+
protected static class ManualOpenEntityManagerInViewInterceptor
349+
extends OpenEntityManagerInViewInterceptor {
350+
351+
}
352+
353+
}
354+
301355
@Configuration
302356
protected static class TestConfigurationWithLocalContainerEntityManagerFactoryBean
303357
extends TestConfiguration {

0 commit comments

Comments
 (0)