From 84a44904a2cc1d54f5fc6719b2e57bc64a3212f0 Mon Sep 17 00:00:00 2001 From: Dmytro Nosan Date: Thu, 19 Jun 2025 10:35:51 +0300 Subject: [PATCH] Exclude NettyAutoConfiguration from global lazy init This commits registers LazyInitializationExcludeFilter to exclude NettyAutoConfiguration from global lazy init Signed-off-by: Dmytro Nosan --- .../netty/NettyAutoConfiguration.java | 7 ++++++ .../netty/NettyAutoConfigurationTests.java | 25 +++++++++++++++---- 2 files changed, 27 insertions(+), 5 deletions(-) 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)); } }