diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/reactor/ReactorAutoConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/reactor/ReactorAutoConfiguration.java index 586dc3cdad4c..5dee07477d3b 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/reactor/ReactorAutoConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/reactor/ReactorAutoConfiguration.java @@ -18,10 +18,12 @@ import reactor.core.publisher.Hooks; +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 Reactor. @@ -40,4 +42,9 @@ public class ReactorAutoConfiguration { } } + @Bean + static LazyInitializationExcludeFilter reactorAutoConfigurationLazyInitializationExcludeFilter() { + return LazyInitializationExcludeFilter.forBeanTypes(ReactorAutoConfiguration.class); + } + } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/reactor/ReactorAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/reactor/ReactorAutoConfigurationTests.java index 39222efc78ab..d7ffd4192fa8 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/reactor/ReactorAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/reactor/ReactorAutoConfigurationTests.java @@ -28,6 +28,7 @@ import reactor.core.publisher.Mono; import reactor.util.context.Context; +import org.springframework.boot.LazyInitializationBeanFactoryPostProcessor; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.test.context.runner.ApplicationContextRunner; @@ -90,4 +91,19 @@ void shouldConfigurePropagationIfSetToAuto() { }); } + @Test + void shouldConfigurePropagationIfSetToAutoAndLazyInitializationIsEnabled() { + AtomicReference threadLocalValue = new AtomicReference<>(); + this.contextRunner.withPropertyValues("spring.reactor.context-propagation=AUTO") + .withInitializer((applicationContext) -> applicationContext + .addBeanFactoryPostProcessor(new LazyInitializationBeanFactoryPostProcessor())) + .run((applicationContext) -> { + Mono.just("test") + .doOnNext((element) -> threadLocalValue.set(THREADLOCAL_VALUE.get())) + .contextWrite(Context.of(THREADLOCAL_KEY, "updated")) + .block(); + assertThat(threadLocalValue.get()).isEqualTo("updated"); + }); + } + }