Back off tracing auto-configurations if tracing is disabled

See gh-31308
This commit is contained in:
Moritz Halbritter 2022-06-10 13:47:14 +02:00
parent b019ff6102
commit 8fab9f290c
9 changed files with 51 additions and 0 deletions

View File

@ -60,6 +60,7 @@ import org.springframework.core.env.Environment;
@AutoConfiguration(before = MicrometerTracingAutoConfiguration.class) @AutoConfiguration(before = MicrometerTracingAutoConfiguration.class)
@ConditionalOnClass(brave.Tracer.class) @ConditionalOnClass(brave.Tracer.class)
@EnableConfigurationProperties(TracingProperties.class) @EnableConfigurationProperties(TracingProperties.class)
@ConditionalOnEnabledTracing
public class BraveAutoConfiguration { public class BraveAutoConfiguration {
/** /**

View File

@ -40,6 +40,7 @@ import org.springframework.core.annotation.Order;
*/ */
@AutoConfiguration @AutoConfiguration
@ConditionalOnClass(Tracer.class) @ConditionalOnClass(Tracer.class)
@ConditionalOnEnabledTracing
public class MicrometerTracingAutoConfiguration { public class MicrometerTracingAutoConfiguration {
/** /**

View File

@ -34,6 +34,7 @@ import org.springframework.context.annotation.Import;
*/ */
@AutoConfiguration(before = MicrometerTracingAutoConfiguration.class) @AutoConfiguration(before = MicrometerTracingAutoConfiguration.class)
@Import({ SdkConfiguration.class, TracerConfiguration.class, MicrometerConfiguration.class }) @Import({ SdkConfiguration.class, TracerConfiguration.class, MicrometerConfiguration.class })
@ConditionalOnEnabledTracing
public class OpenTelemetryAutoConfiguration { public class OpenTelemetryAutoConfiguration {
} }

View File

@ -30,6 +30,7 @@ import io.opentelemetry.sdk.trace.export.SpanExporter;
import org.springframework.boot.actuate.autoconfigure.metrics.CompositeMeterRegistryAutoConfiguration; import org.springframework.boot.actuate.autoconfigure.metrics.CompositeMeterRegistryAutoConfiguration;
import org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration; import org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration;
import org.springframework.boot.actuate.autoconfigure.tracing.ConditionalOnEnabledTracing;
import org.springframework.boot.actuate.autoconfigure.wavefront.WavefrontProperties; import org.springframework.boot.actuate.autoconfigure.wavefront.WavefrontProperties;
import org.springframework.boot.actuate.autoconfigure.wavefront.WavefrontProperties.Tracing; import org.springframework.boot.actuate.autoconfigure.wavefront.WavefrontProperties.Tracing;
import org.springframework.boot.actuate.autoconfigure.wavefront.WavefrontSenderConfiguration; import org.springframework.boot.actuate.autoconfigure.wavefront.WavefrontSenderConfiguration;
@ -54,6 +55,7 @@ import org.springframework.core.env.Environment;
@EnableConfigurationProperties(WavefrontProperties.class) @EnableConfigurationProperties(WavefrontProperties.class)
@ConditionalOnBean(WavefrontSender.class) @ConditionalOnBean(WavefrontSender.class)
@Import(WavefrontSenderConfiguration.class) @Import(WavefrontSenderConfiguration.class)
@ConditionalOnEnabledTracing
public class WavefrontTracingAutoConfiguration { public class WavefrontTracingAutoConfiguration {
/** /**

View File

@ -21,6 +21,7 @@ import zipkin2.codec.BytesEncoder;
import zipkin2.codec.SpanBytesEncoder; import zipkin2.codec.SpanBytesEncoder;
import zipkin2.reporter.Sender; import zipkin2.reporter.Sender;
import org.springframework.boot.actuate.autoconfigure.tracing.ConditionalOnEnabledTracing;
import org.springframework.boot.actuate.autoconfigure.tracing.zipkin.ZipkinConfigurations.BraveConfiguration; import org.springframework.boot.actuate.autoconfigure.tracing.zipkin.ZipkinConfigurations.BraveConfiguration;
import org.springframework.boot.actuate.autoconfigure.tracing.zipkin.ZipkinConfigurations.OpenTelemetryConfiguration; import org.springframework.boot.actuate.autoconfigure.tracing.zipkin.ZipkinConfigurations.OpenTelemetryConfiguration;
import org.springframework.boot.actuate.autoconfigure.tracing.zipkin.ZipkinConfigurations.ReporterConfiguration; import org.springframework.boot.actuate.autoconfigure.tracing.zipkin.ZipkinConfigurations.ReporterConfiguration;
@ -46,6 +47,7 @@ import org.springframework.context.annotation.Import;
@ConditionalOnClass(Sender.class) @ConditionalOnClass(Sender.class)
@Import({ SenderConfiguration.class, ReporterConfiguration.class, BraveConfiguration.class, @Import({ SenderConfiguration.class, ReporterConfiguration.class, BraveConfiguration.class,
OpenTelemetryConfiguration.class }) OpenTelemetryConfiguration.class })
@ConditionalOnEnabledTracing
public class ZipkinAutoConfiguration { public class ZipkinAutoConfiguration {
@Bean @Bean

View File

@ -138,6 +138,20 @@ class BraveAutoConfigurationTests {
}); });
} }
@Test
void shouldNotSupplyBraveBeansIfTracingIsDisabled() {
this.contextRunner.withPropertyValues("management.tracing.enabled=false").run((context) -> {
assertThat(context).doesNotHaveBean(Tracing.class);
assertThat(context).doesNotHaveBean(Tracer.class);
assertThat(context).doesNotHaveBean(CurrentTraceContext.class);
assertThat(context).doesNotHaveBean(Factory.class);
assertThat(context).doesNotHaveBean(Sampler.class);
assertThat(context).doesNotHaveBean(HttpTracing.class);
assertThat(context).doesNotHaveBean(HttpServerHandler.class);
assertThat(context).doesNotHaveBean(HttpClientHandler.class);
});
}
@Configuration(proxyBeanMethods = false) @Configuration(proxyBeanMethods = false)
private static class CustomBraveConfiguration { private static class CustomBraveConfiguration {

View File

@ -116,6 +116,18 @@ class MicrometerTracingAutoConfigurationTests {
.run((context) -> assertThat(context).doesNotHaveBean(HttpServerTracingObservationHandler.class)); .run((context) -> assertThat(context).doesNotHaveBean(HttpServerTracingObservationHandler.class));
} }
@Test
void shouldNotSupplyBeansIfTracingIsDisabled() {
this.contextRunner
.withUserConfiguration(TracerConfiguration.class, HttpClientHandlerConfiguration.class,
HttpServerHandlerConfiguration.class)
.withPropertyValues("management.tracing.enabled=false").run((context) -> {
assertThat(context).doesNotHaveBean(DefaultTracingObservationHandler.class);
assertThat(context).doesNotHaveBean(HttpServerTracingObservationHandler.class);
assertThat(context).doesNotHaveBean(HttpClientTracingObservationHandler.class);
});
}
@Configuration(proxyBeanMethods = false) @Configuration(proxyBeanMethods = false)
private static class TracerConfiguration { private static class TracerConfiguration {

View File

@ -79,6 +79,18 @@ class WavefrontTracingAutoConfigurationTests {
}); });
} }
@Test
void shouldNotSupplyBeansIfTracingIsDisabled() {
this.contextRunner.withPropertyValues("management.tracing.enabled=false")
.withUserConfiguration(WavefrontSenderConfiguration.class).run((context) -> {
assertThat(context).doesNotHaveBean(ApplicationTags.class);
assertThat(context).doesNotHaveBean(WavefrontSpanHandler.class);
assertThat(context).doesNotHaveBean(SpanMetrics.class);
assertThat(context).doesNotHaveBean(WavefrontBraveSpanHandler.class);
assertThat(context).doesNotHaveBean(WavefrontOtelSpanHandler.class);
});
}
@Test @Test
void shouldSupplyMeterRegistrySpanMetricsIfMeterRegistryIsAvailable() { void shouldSupplyMeterRegistrySpanMetricsIfMeterRegistryIsAvailable() {
this.contextRunner.withUserConfiguration(WavefrontSenderConfiguration.class, MeterRegistryConfiguration.class) this.contextRunner.withUserConfiguration(WavefrontSenderConfiguration.class, MeterRegistryConfiguration.class)

View File

@ -58,6 +58,12 @@ class ZipkinAutoConfigurationTests {
}); });
} }
@Test
void shouldNotSupplyBeansIfTracingIsDisabled() {
this.contextRunner.withPropertyValues("management.tracing.enabled=false")
.run((context) -> assertThat(context).doesNotHaveBean(BytesEncoder.class));
}
@Configuration(proxyBeanMethods = false) @Configuration(proxyBeanMethods = false)
private static class CustomConfiguration { private static class CustomConfiguration {