diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/netty/NettyAutoConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/netty/NettyAutoConfiguration.java index c18f2d56678e..49fe159f926e 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/netty/NettyAutoConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/netty/NettyAutoConfiguration.java @@ -19,10 +19,12 @@ import io.netty.util.NettyRuntime; import io.netty.util.ResourceLeakDetector; +import org.springframework.boot.LazyInitializationExcludeFilter; import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; /** * {@link EnableAutoConfiguration Auto-configuration} for Netty. @@ -42,4 +44,9 @@ public NettyAutoConfiguration(NettyProperties properties) { } } + @Bean + static LazyInitializationExcludeFilter nettyAutoConfigurationLazyInitializationExcludeFilter() { + return LazyInitializationExcludeFilter.forBeanTypes(NettyAutoConfiguration.class); + } + } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/netty/NettyAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/netty/NettyAutoConfigurationTests.java index 7e6f112d11a0..a58c80725037 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/netty/NettyAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/netty/NettyAutoConfigurationTests.java @@ -17,8 +17,10 @@ package org.springframework.boot.autoconfigure.netty; import io.netty.util.ResourceLeakDetector; +import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; +import org.springframework.boot.LazyInitializationBeanFactoryPostProcessor; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.test.context.runner.ApplicationContextRunner; @@ -34,13 +36,26 @@ class NettyAutoConfigurationTests { private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() .withConfiguration(AutoConfigurations.of(NettyAutoConfiguration.class)); + @AfterEach + void resetResourceLeakDetector() { + ResourceLeakDetector.setLevel(ResourceLeakDetector.Level.DISABLED); + } + @Test void leakDetectionShouldBeConfigured() { - this.contextRunner.withPropertyValues("spring.netty.leak-detection=paranoid").run((context) -> { - assertThat(ResourceLeakDetector.getLevel()).isEqualTo(ResourceLeakDetector.Level.PARANOID); - // reset configuration for the following tests. - ResourceLeakDetector.setLevel(ResourceLeakDetector.Level.DISABLED); - }); + this.contextRunner.withPropertyValues("spring.netty.leak-detection=paranoid") + .run((context) -> assertThat(ResourceLeakDetector.getLevel()) + .isEqualTo(ResourceLeakDetector.Level.PARANOID)); + } + + @Test + void leakDetectionShouldBeConfiguredWhenLazyInitializationIsEnabled() { + this.contextRunner + .withInitializer( + (context) -> context.addBeanFactoryPostProcessor(new LazyInitializationBeanFactoryPostProcessor())) + .withPropertyValues("spring.netty.leak-detection=advanced") + .run((context) -> assertThat(ResourceLeakDetector.getLevel()) + .isEqualTo(ResourceLeakDetector.Level.ADVANCED)); } }