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)
@ConditionalOnClass(brave.Tracer.class)
@EnableConfigurationProperties(TracingProperties.class)
@ConditionalOnEnabledTracing
public class BraveAutoConfiguration {
/**

View File

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

View File

@ -34,6 +34,7 @@ import org.springframework.context.annotation.Import;
*/
@AutoConfiguration(before = MicrometerTracingAutoConfiguration.class)
@Import({ SdkConfiguration.class, TracerConfiguration.class, MicrometerConfiguration.class })
@ConditionalOnEnabledTracing
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.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.Tracing;
import org.springframework.boot.actuate.autoconfigure.wavefront.WavefrontSenderConfiguration;
@ -54,6 +55,7 @@ import org.springframework.core.env.Environment;
@EnableConfigurationProperties(WavefrontProperties.class)
@ConditionalOnBean(WavefrontSender.class)
@Import(WavefrontSenderConfiguration.class)
@ConditionalOnEnabledTracing
public class WavefrontTracingAutoConfiguration {
/**

View File

@ -21,6 +21,7 @@ import zipkin2.codec.BytesEncoder;
import zipkin2.codec.SpanBytesEncoder;
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.OpenTelemetryConfiguration;
import org.springframework.boot.actuate.autoconfigure.tracing.zipkin.ZipkinConfigurations.ReporterConfiguration;
@ -46,6 +47,7 @@ import org.springframework.context.annotation.Import;
@ConditionalOnClass(Sender.class)
@Import({ SenderConfiguration.class, ReporterConfiguration.class, BraveConfiguration.class,
OpenTelemetryConfiguration.class })
@ConditionalOnEnabledTracing
public class ZipkinAutoConfiguration {
@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)
private static class CustomBraveConfiguration {

View File

@ -116,6 +116,18 @@ class MicrometerTracingAutoConfigurationTests {
.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)
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
void shouldSupplyMeterRegistrySpanMetricsIfMeterRegistryIsAvailable() {
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)
private static class CustomConfiguration {