Skip to content

Commit e2571a4

Browse files
committed
Exclude ReactorAutoConfiguration from lazy initialization
Closes gh-45846
1 parent 7e0d164 commit e2571a4

File tree

2 files changed

+28
-7
lines changed

2 files changed

+28
-7
lines changed

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/reactor/ReactorAutoConfiguration.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,12 @@
1818

1919
import reactor.core.publisher.Hooks;
2020

21+
import org.springframework.boot.LazyInitializationExcludeFilter;
2122
import org.springframework.boot.autoconfigure.AutoConfiguration;
2223
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
2324
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
2425
import org.springframework.boot.context.properties.EnableConfigurationProperties;
26+
import org.springframework.context.annotation.Bean;
2527

2628
/**
2729
* {@link EnableAutoConfiguration Auto-configuration} for Reactor.
@@ -40,4 +42,9 @@ public class ReactorAutoConfiguration {
4042
}
4143
}
4244

45+
@Bean
46+
static LazyInitializationExcludeFilter reactorAutoConfigurationLazyInitializationExcludeFilter() {
47+
return LazyInitializationExcludeFilter.forBeanTypes(ReactorAutoConfiguration.class);
48+
}
49+
4350
}

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/reactor/ReactorAutoConfigurationTests.java

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import reactor.core.publisher.Mono;
2929
import reactor.util.context.Context;
3030

31+
import org.springframework.boot.LazyInitializationBeanFactoryPostProcessor;
3132
import org.springframework.boot.autoconfigure.AutoConfigurations;
3233
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
3334

@@ -81,13 +82,26 @@ void shouldNotConfigurePropagationByDefault() {
8182
@Test
8283
void shouldConfigurePropagationIfSetToAuto() {
8384
AtomicReference<String> threadLocalValue = new AtomicReference<>();
84-
this.contextRunner.withPropertyValues("spring.reactor.context-propagation=auto").run((applicationContext) -> {
85-
Mono.just("test")
86-
.doOnNext((element) -> threadLocalValue.set(THREADLOCAL_VALUE.get()))
87-
.contextWrite(Context.of(THREADLOCAL_KEY, "updated"))
88-
.block();
89-
assertThat(threadLocalValue.get()).isEqualTo("updated");
90-
});
85+
this.contextRunner.withPropertyValues("spring.reactor.context-propagation=auto")
86+
.run((applicationContext) -> assertThatPropagationIsWorking(threadLocalValue));
87+
}
88+
89+
@Test
90+
void shouldConfigurePropagationIfSetToAutoAndLazyInitializationIsEnabled() {
91+
AtomicReference<String> threadLocalValue = new AtomicReference<>();
92+
this.contextRunner
93+
.withInitializer(
94+
(context) -> context.addBeanFactoryPostProcessor(new LazyInitializationBeanFactoryPostProcessor()))
95+
.withPropertyValues("spring.reactor.context-propagation=auto")
96+
.run((context) -> assertThatPropagationIsWorking(threadLocalValue));
97+
}
98+
99+
private void assertThatPropagationIsWorking(AtomicReference<String> threadLocalValue) {
100+
Mono.just("test")
101+
.doOnNext((element) -> threadLocalValue.set(THREADLOCAL_VALUE.get()))
102+
.contextWrite(Context.of(THREADLOCAL_KEY, "updated"))
103+
.block();
104+
assertThat(threadLocalValue.get()).isEqualTo("updated");
91105
}
92106

93107
}

0 commit comments

Comments
 (0)