From 767631e2cc35be5fce36688d0dfa85544b9f2d37 Mon Sep 17 00:00:00 2001 From: Moritz Halbritter Date: Tue, 2 Aug 2022 11:10:38 +0200 Subject: [PATCH] Fix bean chicken and egg problem with WavefrontSender Closes gh-31954 --- .../wavefront/WavefrontMetricsExportAutoConfiguration.java | 3 ++- .../tracing/wavefront/WavefrontTracingAutoConfiguration.java | 3 ++- .../wavefront/WavefrontTracingAutoConfigurationTests.java | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/wavefront/WavefrontMetricsExportAutoConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/wavefront/WavefrontMetricsExportAutoConfiguration.java index 09010f06e1..470d4f919a 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/wavefront/WavefrontMetricsExportAutoConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/export/wavefront/WavefrontMetricsExportAutoConfiguration.java @@ -47,7 +47,7 @@ import org.springframework.context.annotation.Import; @AutoConfiguration( before = { CompositeMeterRegistryAutoConfiguration.class, SimpleMetricsExportAutoConfiguration.class }, after = MetricsAutoConfiguration.class) -@ConditionalOnBean({ Clock.class, WavefrontSender.class }) +@ConditionalOnBean(Clock.class) @ConditionalOnClass({ WavefrontMeterRegistry.class, WavefrontSender.class }) @ConditionalOnEnabledMetricsExport("wavefront") @EnableConfigurationProperties(WavefrontProperties.class) @@ -62,6 +62,7 @@ public class WavefrontMetricsExportAutoConfiguration { @Bean @ConditionalOnMissingBean + @ConditionalOnBean(WavefrontSender.class) public WavefrontMeterRegistry wavefrontMeterRegistry(WavefrontConfig wavefrontConfig, Clock clock, WavefrontSender wavefrontSender) { return WavefrontMeterRegistry.builder(wavefrontConfig).clock(clock).wavefrontSender(wavefrontSender).build(); diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/tracing/wavefront/WavefrontTracingAutoConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/tracing/wavefront/WavefrontTracingAutoConfiguration.java index 6cf4db4623..d717d1925f 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/tracing/wavefront/WavefrontTracingAutoConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/tracing/wavefront/WavefrontTracingAutoConfiguration.java @@ -53,7 +53,7 @@ import org.springframework.core.env.Environment; */ @AutoConfiguration(after = { MetricsAutoConfiguration.class, CompositeMeterRegistryAutoConfiguration.class }) @EnableConfigurationProperties(WavefrontProperties.class) -@ConditionalOnBean(WavefrontSender.class) +@ConditionalOnClass(WavefrontSender.class) @Import(WavefrontSenderConfiguration.class) @ConditionalOnEnabledTracing public class WavefrontTracingAutoConfiguration { @@ -80,6 +80,7 @@ public class WavefrontTracingAutoConfiguration { @Bean @ConditionalOnMissingBean + @ConditionalOnBean(WavefrontSender.class) WavefrontSpanHandler wavefrontSpanHandler(WavefrontProperties properties, WavefrontSender wavefrontSender, SpanMetrics spanMetrics, ApplicationTags applicationTags) { return new WavefrontSpanHandler(properties.getSender().getMaxQueueSize(), wavefrontSender, spanMetrics, diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/tracing/wavefront/WavefrontTracingAutoConfigurationTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/tracing/wavefront/WavefrontTracingAutoConfigurationTests.java index a4b9a0f9bf..138218c3e0 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/tracing/wavefront/WavefrontTracingAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/tracing/wavefront/WavefrontTracingAutoConfigurationTests.java @@ -58,7 +58,7 @@ class WavefrontTracingAutoConfigurationTests { @Test void shouldNotSupplyBeansIfWavefrontSenderIsMissing() { - this.contextRunner.run((context) -> { + this.contextRunner.withClassLoader(new FilteredClassLoader(WavefrontSender.class)).run((context) -> { assertThat(context).doesNotHaveBean(ApplicationTags.class); assertThat(context).doesNotHaveBean(WavefrontSpanHandler.class); assertThat(context).doesNotHaveBean(SpanMetrics.class);