Skip to content

Commit 27add2b

Browse files
committed
Rework @AutoConfigureObservability and tracing auto-configurations
@ConditionalOnEnabledTracing is now applied to the minimal amount of beans. The beans which are annotated with it are beans that will lead to span sending to backends. This leaves the majority of the Micrometer Tracing, Brave and OpenTelemetry infrastructure untouched in tests. Closes gh-35354
1 parent fb4b26a commit 27add2b

21 files changed

+100
-208
lines changed

spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/tracing/BraveAutoConfiguration.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,6 @@
7676
@AutoConfiguration(before = MicrometerTracingAutoConfiguration.class)
7777
@ConditionalOnClass({ Tracer.class, BraveTracer.class })
7878
@EnableConfigurationProperties(TracingProperties.class)
79-
@ConditionalOnEnabledTracing
8079
public class BraveAutoConfiguration {
8180

8281
private static final BraveBaggageManager BRAVE_BAGGAGE_MANAGER = new BraveBaggageManager();

spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/tracing/MicrometerTracingAutoConfiguration.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@
3939
*/
4040
@AutoConfiguration
4141
@ConditionalOnClass(Tracer.class)
42-
@ConditionalOnEnabledTracing
4342
public class MicrometerTracingAutoConfiguration {
4443

4544
/**

spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/tracing/OpenTelemetryAutoConfiguration.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,6 @@
7575
* @since 3.0.0
7676
*/
7777
@AutoConfiguration(before = MicrometerTracingAutoConfiguration.class)
78-
@ConditionalOnEnabledTracing
7978
@ConditionalOnClass({ OtelTracer.class, SdkTracerProvider.class, OpenTelemetry.class })
8079
@EnableConfigurationProperties(TracingProperties.class)
8180
public class OpenTelemetryAutoConfiguration {

spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/tracing/otlp/OtlpAutoConfiguration.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@
5050
* @since 3.1.0
5151
*/
5252
@AutoConfiguration
53-
@ConditionalOnEnabledTracing
5453
@ConditionalOnClass({ OtelTracer.class, SdkTracerProvider.class, OpenTelemetry.class, OtlpHttpSpanExporter.class })
5554
@EnableConfigurationProperties(OtlpProperties.class)
5655
public class OtlpAutoConfiguration {
@@ -59,6 +58,7 @@ public class OtlpAutoConfiguration {
5958
@ConditionalOnMissingBean(value = OtlpHttpSpanExporter.class,
6059
type = "io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporter")
6160
@ConditionalOnProperty(prefix = "management.otlp.tracing", name = "endpoint")
61+
@ConditionalOnEnabledTracing
6262
OtlpHttpSpanExporter otlpHttpSpanExporter(OtlpProperties properties) {
6363
OtlpHttpSpanExporterBuilder builder = OtlpHttpSpanExporter.builder()
6464
.setEndpoint(properties.getEndpoint())

spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/tracing/prometheus/PrometheusExemplarsAutoConfiguration.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222

2323
import org.springframework.beans.factory.ObjectProvider;
2424
import org.springframework.boot.actuate.autoconfigure.metrics.export.prometheus.PrometheusMetricsExportAutoConfiguration;
25-
import org.springframework.boot.actuate.autoconfigure.tracing.ConditionalOnEnabledTracing;
2625
import org.springframework.boot.actuate.autoconfigure.tracing.MicrometerTracingAutoConfiguration;
2726
import org.springframework.boot.autoconfigure.AutoConfiguration;
2827
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
@@ -43,7 +42,6 @@
4342
after = MicrometerTracingAutoConfiguration.class)
4443
@ConditionalOnBean(Tracer.class)
4544
@ConditionalOnClass({ Tracer.class, SpanContextSupplier.class })
46-
@ConditionalOnEnabledTracing
4745
public class PrometheusExemplarsAutoConfiguration {
4846

4947
@Bean

spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/tracing/wavefront/WavefrontTracingAutoConfiguration.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,14 +52,14 @@
5252
@AutoConfiguration(after = { MetricsAutoConfiguration.class, CompositeMeterRegistryAutoConfiguration.class,
5353
WavefrontAutoConfiguration.class })
5454
@ConditionalOnClass({ WavefrontSender.class, WavefrontSpanHandler.class })
55-
@ConditionalOnEnabledTracing
5655
@EnableConfigurationProperties(WavefrontProperties.class)
5756
@Import(WavefrontSenderConfiguration.class)
5857
public class WavefrontTracingAutoConfiguration {
5958

6059
@Bean
6160
@ConditionalOnMissingBean
6261
@ConditionalOnBean(WavefrontSender.class)
62+
@ConditionalOnEnabledTracing
6363
WavefrontSpanHandler wavefrontSpanHandler(WavefrontProperties properties, WavefrontSender wavefrontSender,
6464
SpanMetrics spanMetrics, ApplicationTags applicationTags) {
6565
return new WavefrontSpanHandler(properties.getSender().getMaxQueueSize(), wavefrontSender, spanMetrics,
@@ -96,6 +96,7 @@ static class WavefrontBrave {
9696

9797
@Bean
9898
@ConditionalOnMissingBean
99+
@ConditionalOnEnabledTracing
99100
WavefrontBraveSpanHandler wavefrontBraveSpanHandler(WavefrontSpanHandler wavefrontSpanHandler) {
100101
return new WavefrontBraveSpanHandler(wavefrontSpanHandler);
101102
}
@@ -108,6 +109,7 @@ static class WavefrontOpenTelemetry {
108109

109110
@Bean
110111
@ConditionalOnMissingBean
112+
@ConditionalOnEnabledTracing
111113
WavefrontOtelSpanExporter wavefrontOtelSpanExporter(WavefrontSpanHandler wavefrontSpanHandler) {
112114
return new WavefrontOtelSpanExporter(wavefrontSpanHandler);
113115
}

spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/tracing/zipkin/ZipkinAutoConfiguration.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import zipkin2.codec.SpanBytesEncoder;
2222
import zipkin2.reporter.Sender;
2323

24-
import org.springframework.boot.actuate.autoconfigure.tracing.ConditionalOnEnabledTracing;
2524
import org.springframework.boot.actuate.autoconfigure.tracing.zipkin.ZipkinConfigurations.BraveConfiguration;
2625
import org.springframework.boot.actuate.autoconfigure.tracing.zipkin.ZipkinConfigurations.OpenTelemetryConfiguration;
2726
import org.springframework.boot.actuate.autoconfigure.tracing.zipkin.ZipkinConfigurations.ReporterConfiguration;
@@ -48,7 +47,6 @@
4847
@ConditionalOnClass(Sender.class)
4948
@Import({ SenderConfiguration.class, ReporterConfiguration.class, BraveConfiguration.class,
5049
OpenTelemetryConfiguration.class })
51-
@ConditionalOnEnabledTracing
5250
@EnableConfigurationProperties(ZipkinProperties.class)
5351
public class ZipkinAutoConfiguration {
5452

spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/tracing/zipkin/ZipkinConfigurations.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import zipkin2.reporter.urlconnection.URLConnectionSender;
2727

2828
import org.springframework.beans.factory.ObjectProvider;
29+
import org.springframework.boot.actuate.autoconfigure.tracing.ConditionalOnEnabledTracing;
2930
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
3031
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
3132
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
@@ -142,6 +143,7 @@ static class BraveConfiguration {
142143
@Bean
143144
@ConditionalOnMissingBean
144145
@ConditionalOnBean(Reporter.class)
146+
@ConditionalOnEnabledTracing
145147
ZipkinSpanHandler zipkinSpanHandler(Reporter<Span> spanReporter) {
146148
return (ZipkinSpanHandler) ZipkinSpanHandler.newBuilder(spanReporter).build();
147149
}
@@ -155,6 +157,7 @@ static class OpenTelemetryConfiguration {
155157
@Bean
156158
@ConditionalOnMissingBean
157159
@ConditionalOnBean(Sender.class)
160+
@ConditionalOnEnabledTracing
158161
ZipkinSpanExporter zipkinSpanExporter(BytesEncoder<Span> encoder, Sender sender) {
159162
return ZipkinSpanExporter.builder().setEncoder(encoder).setSender(sender).build();
160163
}

spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/wavefront/WavefrontSenderConfiguration.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,17 @@
2121
import com.wavefront.sdk.common.WavefrontSender;
2222
import com.wavefront.sdk.common.clients.WavefrontClient.Builder;
2323

24+
import org.springframework.boot.actuate.autoconfigure.metrics.export.ConditionalOnEnabledMetricsExport;
2425
import org.springframework.boot.actuate.autoconfigure.metrics.export.wavefront.WavefrontMetricsExportAutoConfiguration;
26+
import org.springframework.boot.actuate.autoconfigure.tracing.ConditionalOnEnabledTracing;
2527
import org.springframework.boot.actuate.autoconfigure.tracing.wavefront.WavefrontTracingAutoConfiguration;
28+
import org.springframework.boot.autoconfigure.condition.AnyNestedCondition;
2629
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
2730
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
2831
import org.springframework.boot.context.properties.EnableConfigurationProperties;
2932
import org.springframework.boot.context.properties.PropertyMapper;
3033
import org.springframework.context.annotation.Bean;
34+
import org.springframework.context.annotation.Conditional;
3135
import org.springframework.context.annotation.Configuration;
3236
import org.springframework.util.unit.DataSize;
3337

@@ -46,6 +50,7 @@ public class WavefrontSenderConfiguration {
4650

4751
@Bean
4852
@ConditionalOnMissingBean
53+
@Conditional(WavefrontTracingOrMetricsCondition.class)
4954
public WavefrontSender wavefrontSender(WavefrontProperties properties) {
5055
Builder builder = new Builder(properties.getEffectiveUri().toString(), properties.getApiTokenOrThrow());
5156
PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull();
@@ -57,4 +62,22 @@ public WavefrontSender wavefrontSender(WavefrontProperties properties) {
5762
return builder.build();
5863
}
5964

65+
static final class WavefrontTracingOrMetricsCondition extends AnyNestedCondition {
66+
67+
WavefrontTracingOrMetricsCondition() {
68+
super(ConfigurationPhase.REGISTER_BEAN);
69+
}
70+
71+
@ConditionalOnEnabledTracing
72+
static class TracingCondition {
73+
74+
}
75+
76+
@ConditionalOnEnabledMetricsExport("wavefront")
77+
static class MetricsCondition {
78+
79+
}
80+
81+
}
82+
6083
}

spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/WebEndpointsAutoConfigurationIntegrationTests.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
import org.junit.jupiter.api.Test;
2020

2121
import org.springframework.boot.SpringBootConfiguration;
22+
import org.springframework.boot.actuate.autoconfigure.tracing.BraveAutoConfiguration;
23+
import org.springframework.boot.actuate.autoconfigure.tracing.OpenTelemetryAutoConfiguration;
2224
import org.springframework.boot.actuate.health.HealthEndpointWebExtension;
2325
import org.springframework.boot.actuate.health.ReactiveHealthEndpointWebExtension;
2426
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
@@ -80,7 +82,8 @@ private ReactiveWebApplicationContextRunner reactiveWebRunner() {
8082
MongoReactiveAutoConfiguration.class, MongoReactiveDataAutoConfiguration.class,
8183
RepositoryRestMvcAutoConfiguration.class, HazelcastAutoConfiguration.class,
8284
ElasticsearchDataAutoConfiguration.class, RedisAutoConfiguration.class,
83-
RedisRepositoriesAutoConfiguration.class })
85+
RedisRepositoriesAutoConfiguration.class, BraveAutoConfiguration.class,
86+
OpenTelemetryAutoConfiguration.class })
8487
@SpringBootConfiguration
8588
static class WebEndpointTestApplication {
8689

spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/tracing/BraveAutoConfigurationTests.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -151,12 +151,6 @@ void shouldSupplyB3PropagationFactoryViaProperty() {
151151
});
152152
}
153153

154-
@Test
155-
void shouldNotSupplyBeansIfTracingIsDisabled() {
156-
this.contextRunner.withPropertyValues("management.tracing.enabled=false")
157-
.run((context) -> assertThat(context).doesNotHaveBean(BraveAutoConfiguration.class));
158-
}
159-
160154
@Test
161155
void shouldNotSupplyCorrelationScopeDecoratorIfBaggageDisabled() {
162156
this.contextRunner.withPropertyValues("management.tracing.baggage.enabled=false")

spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/tracing/MicrometerTracingAutoConfigurationTests.java

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -111,17 +111,6 @@ void shouldNotSupplyBeansIfPropagatorIsMissing() {
111111
});
112112
}
113113

114-
@Test
115-
void shouldNotSupplyBeansIfTracingIsDisabled() {
116-
this.contextRunner.withUserConfiguration(TracerConfiguration.class, PropagatorConfiguration.class)
117-
.withPropertyValues("management.tracing.enabled=false")
118-
.run((context) -> {
119-
assertThat(context).doesNotHaveBean(DefaultTracingObservationHandler.class);
120-
assertThat(context).doesNotHaveBean(PropagatingReceiverTracingObservationHandler.class);
121-
assertThat(context).doesNotHaveBean(PropagatingSenderTracingObservationHandler.class);
122-
});
123-
}
124-
125114
@Configuration(proxyBeanMethods = false)
126115
private static class TracerConfiguration {
127116

spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/tracing/otlp/OtlpAutoConfigurationTests.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@ class OtlpAutoConfigurationTests {
4040
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
4141
.withConfiguration(AutoConfigurations.of(OtlpAutoConfiguration.class));
4242

43+
private final ApplicationContextRunner tracingDisabledContextRunner = this.contextRunner
44+
.withPropertyValues("management.tracing.enabled=false");
45+
4346
@Test
4447
void shouldNotSupplyBeansIfPropertyIsNotSet() {
4548
this.contextRunner.run((context) -> assertThat(context).doesNotHaveBean(OtlpHttpSpanExporter.class));
@@ -96,6 +99,13 @@ void shouldBackOffWhenCustomGrpcExporterIsDefined() {
9699
.hasSingleBean(SpanExporter.class));
97100
}
98101

102+
@Test
103+
void shouldNotSupplyOtlpHttpSpanExporterIfTracingIsDisabled() {
104+
this.tracingDisabledContextRunner
105+
.withPropertyValues("management.otlp.tracing.endpoint=http://localhost:4318/v1/traces")
106+
.run((context) -> assertThat(context).doesNotHaveBean(OtlpHttpSpanExporter.class));
107+
}
108+
99109
@Configuration(proxyBeanMethods = false)
100110
private static class CustomHttpExporterConfiguration {
101111

spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/tracing/prometheus/PrometheusExemplarsAutoConfigurationTests.java

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
/**
4141
* Tests for {@link PrometheusExemplarsAutoConfiguration}.
4242
*
43-
* * @author Jonatan Ivanov
43+
* @author Jonatan Ivanov
4444
*/
4545
class PrometheusExemplarsAutoConfigurationTests {
4646

@@ -52,12 +52,6 @@ class PrometheusExemplarsAutoConfigurationTests {
5252
AutoConfigurations.of(PrometheusExemplarsAutoConfiguration.class, ObservationAutoConfiguration.class,
5353
BraveAutoConfiguration.class, MicrometerTracingAutoConfiguration.class));
5454

55-
@Test
56-
void shouldNotSupplyBeansIfTracingIsDisabled() {
57-
this.contextRunner.withPropertyValues("management.tracing.enabled=false")
58-
.run((context) -> assertThat(context).doesNotHaveBean(SpanContextSupplier.class));
59-
}
60-
6155
@Test
6256
void shouldNotSupplyBeansIfPrometheusSupportIsMissing() {
6357
this.contextRunner.withClassLoader(new FilteredClassLoader("io.prometheus.client.exemplars"))

spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/tracing/wavefront/WavefrontTracingAutoConfigurationTests.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,9 @@ class WavefrontTracingAutoConfigurationTests {
4747
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner().withConfiguration(
4848
AutoConfigurations.of(WavefrontAutoConfiguration.class, WavefrontTracingAutoConfiguration.class));
4949

50+
private final ApplicationContextRunner tracingDisabledContextRunner = this.contextRunner
51+
.withPropertyValues("management.tracing.enabled=false");
52+
5053
@Test
5154
void shouldSupplyBeans() {
5255
this.contextRunner.withUserConfiguration(WavefrontSenderConfiguration.class).run((context) -> {
@@ -83,14 +86,11 @@ void shouldNotSupplyBeansIfMicrometerReporterWavefrontIsMissing() {
8386

8487
@Test
8588
void shouldNotSupplyBeansIfTracingIsDisabled() {
86-
this.contextRunner.withPropertyValues("management.tracing.enabled=false")
87-
.withUserConfiguration(WavefrontSenderConfiguration.class)
88-
.run((context) -> {
89-
assertThat(context).doesNotHaveBean(WavefrontSpanHandler.class);
90-
assertThat(context).doesNotHaveBean(SpanMetrics.class);
91-
assertThat(context).doesNotHaveBean(WavefrontBraveSpanHandler.class);
92-
assertThat(context).doesNotHaveBean(WavefrontOtelSpanExporter.class);
93-
});
89+
this.tracingDisabledContextRunner.withUserConfiguration(WavefrontSenderConfiguration.class).run((context) -> {
90+
assertThat(context).doesNotHaveBean(WavefrontSpanHandler.class);
91+
assertThat(context).doesNotHaveBean(WavefrontBraveSpanHandler.class);
92+
assertThat(context).doesNotHaveBean(WavefrontOtelSpanExporter.class);
93+
});
9494
}
9595

9696
@Test

spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/tracing/zipkin/ZipkinAutoConfigurationTests.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,6 @@ void shouldBackOffOnCustomBeans() {
5959
});
6060
}
6161

62-
@Test
63-
void shouldNotSupplyBeansIfTracingIsDisabled() {
64-
this.contextRunner.withPropertyValues("management.tracing.enabled=false")
65-
.run((context) -> assertThat(context).doesNotHaveBean(BytesEncoder.class));
66-
}
67-
6862
@Test
6963
void definesPropertiesBasedConnectionDetailsByDefault() {
7064
this.contextRunner.run((context) -> assertThat(context).hasSingleBean(PropertiesZipkinConnectionDetails.class));

spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/tracing/zipkin/ZipkinConfigurationsBraveConfigurationTests.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,9 @@ class ZipkinConfigurationsBraveConfigurationTests {
4242
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
4343
.withConfiguration(AutoConfigurations.of(BraveConfiguration.class));
4444

45+
private final ApplicationContextRunner tracingDisabledContextRunner = this.contextRunner
46+
.withPropertyValues("management.tracing.enabled=false");
47+
4548
@Test
4649
void shouldSupplyBeans() {
4750
this.contextRunner.withUserConfiguration(ReporterConfiguration.class)
@@ -79,6 +82,12 @@ void shouldSupplyZipkinSpanHandlerWithCustomSpanHandler() {
7982
});
8083
}
8184

85+
@Test
86+
void shouldNotSupplyZipkinSpanHandlerIfTracingIsDisabled() {
87+
this.tracingDisabledContextRunner.withUserConfiguration(ReporterConfiguration.class)
88+
.run((context) -> assertThat(context).doesNotHaveBean(ZipkinSpanHandler.class));
89+
}
90+
8291
@Configuration(proxyBeanMethods = false)
8392
private static class ReporterConfiguration {
8493

spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/tracing/zipkin/ZipkinConfigurationsOpenTelemetryConfigurationTests.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,9 @@ class ZipkinConfigurationsOpenTelemetryConfigurationTests {
4343
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
4444
.withConfiguration(AutoConfigurations.of(BaseConfiguration.class, OpenTelemetryConfiguration.class));
4545

46+
private final ApplicationContextRunner tracingDisabledContextRunner = this.contextRunner
47+
.withPropertyValues("management.tracing.enabled=false");
48+
4649
@Test
4750
void shouldSupplyBeans() {
4851
this.contextRunner.withUserConfiguration(SenderConfiguration.class)
@@ -70,6 +73,12 @@ void shouldBackOffOnCustomBeans() {
7073
});
7174
}
7275

76+
@Test
77+
void shouldNotSupplyZipkinSpanExporterIfTracingIsDisabled() {
78+
this.tracingDisabledContextRunner.withUserConfiguration(SenderConfiguration.class)
79+
.run((context) -> assertThat(context).doesNotHaveBean(ZipkinSpanExporter.class));
80+
}
81+
7382
@Configuration(proxyBeanMethods = false)
7483
private static class SenderConfiguration {
7584

0 commit comments

Comments
 (0)