Browse Source

Exclude ReactorAutoConfiguration from lazy initialization

Closes gh-45846
pull/46211/head
Moritz Halbritter 7 months ago
parent
commit
e2571a41bf
  1. 7
      spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/reactor/ReactorAutoConfiguration.java
  2. 28
      spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/reactor/ReactorAutoConfigurationTests.java

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

@ -18,10 +18,12 @@ package org.springframework.boot.autoconfigure.reactor; @@ -18,10 +18,12 @@ package org.springframework.boot.autoconfigure.reactor;
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 { @@ -40,4 +42,9 @@ public class ReactorAutoConfiguration {
}
}
@Bean
static LazyInitializationExcludeFilter reactorAutoConfigurationLazyInitializationExcludeFilter() {
return LazyInitializationExcludeFilter.forBeanTypes(ReactorAutoConfiguration.class);
}
}

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

@ -28,6 +28,7 @@ import reactor.core.publisher.Hooks; @@ -28,6 +28,7 @@ import reactor.core.publisher.Hooks;
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;
@ -81,13 +82,26 @@ class ReactorAutoConfigurationTests { @@ -81,13 +82,26 @@ class ReactorAutoConfigurationTests {
@Test
void shouldConfigurePropagationIfSetToAuto() {
AtomicReference<String> threadLocalValue = new AtomicReference<>();
this.contextRunner.withPropertyValues("spring.reactor.context-propagation=auto").run((applicationContext) -> {
Mono.just("test")
.doOnNext((element) -> threadLocalValue.set(THREADLOCAL_VALUE.get()))
.contextWrite(Context.of(THREADLOCAL_KEY, "updated"))
.block();
assertThat(threadLocalValue.get()).isEqualTo("updated");
});
this.contextRunner.withPropertyValues("spring.reactor.context-propagation=auto")
.run((applicationContext) -> assertThatPropagationIsWorking(threadLocalValue));
}
@Test
void shouldConfigurePropagationIfSetToAutoAndLazyInitializationIsEnabled() {
AtomicReference<String> threadLocalValue = new AtomicReference<>();
this.contextRunner
.withInitializer(
(context) -> context.addBeanFactoryPostProcessor(new LazyInitializationBeanFactoryPostProcessor()))
.withPropertyValues("spring.reactor.context-propagation=auto")
.run((context) -> assertThatPropagationIsWorking(threadLocalValue));
}
private void assertThatPropagationIsWorking(AtomicReference<String> threadLocalValue) {
Mono.just("test")
.doOnNext((element) -> threadLocalValue.set(THREADLOCAL_VALUE.get()))
.contextWrite(Context.of(THREADLOCAL_KEY, "updated"))
.block();
assertThat(threadLocalValue.get()).isEqualTo("updated");
}
}

Loading…
Cancel
Save