Skip to content

Commit 8506cfd

Browse files
committed
Merge branch '4.0.x'
Closes gh-49215
2 parents 918e59b + cdf8d2e commit 8506cfd

File tree

5 files changed

+66
-4
lines changed

5 files changed

+66
-4
lines changed

module/spring-boot-micrometer-tracing-brave/src/main/java/org/springframework/boot/micrometer/tracing/brave/autoconfigure/BraveAutoConfiguration.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import io.micrometer.tracing.exporter.SpanExportingPredicate;
4040
import io.micrometer.tracing.exporter.SpanFilter;
4141
import io.micrometer.tracing.exporter.SpanReporter;
42+
import io.micrometer.tracing.propagation.Propagator;
4243

4344
import org.springframework.beans.factory.ObjectProvider;
4445
import org.springframework.boot.autoconfigure.AutoConfiguration;
@@ -166,7 +167,7 @@ BraveTracer braveTracerBridge(brave.Tracer tracer, CurrentTraceContext currentTr
166167
}
167168

168169
@Bean
169-
@ConditionalOnMissingBean
170+
@ConditionalOnMissingBean(Propagator.class)
170171
BravePropagator bravePropagator(Tracing tracing) {
171172
return new BravePropagator(tracing);
172173
}

module/spring-boot-micrometer-tracing-brave/src/test/java/org/springframework/boot/micrometer/tracing/brave/autoconfigure/BraveAutoConfigurationTests.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,15 @@
3939
import io.micrometer.observation.Observation.Scope;
4040
import io.micrometer.observation.ObservationRegistry;
4141
import io.micrometer.tracing.brave.bridge.BraveBaggageManager;
42+
import io.micrometer.tracing.brave.bridge.BravePropagator;
4243
import io.micrometer.tracing.brave.bridge.BraveSpanCustomizer;
4344
import io.micrometer.tracing.brave.bridge.BraveTracer;
4445
import io.micrometer.tracing.brave.bridge.CompositeSpanHandler;
4546
import io.micrometer.tracing.brave.bridge.W3CPropagation;
4647
import io.micrometer.tracing.exporter.SpanExportingPredicate;
4748
import io.micrometer.tracing.exporter.SpanFilter;
4849
import io.micrometer.tracing.exporter.SpanReporter;
50+
import io.micrometer.tracing.propagation.Propagator;
4951
import org.assertj.core.api.InstanceOfAssertFactories;
5052
import org.junit.jupiter.api.Test;
5153

@@ -126,6 +128,15 @@ void shouldSupplyMicrometerBeans() {
126128
this.contextRunner.run((context) -> assertThat(context).hasSingleBean(BraveTracer.class));
127129
}
128130

131+
@Test
132+
void shouldNotSupplyBravePropagatorWhenPropagatorBeanIsPresent() {
133+
this.contextRunner.withUserConfiguration(PropagatorConfiguration.class).run((context) -> {
134+
assertThat(context).hasSingleBean(Propagator.class);
135+
assertThat(context).hasBean("customPropagator");
136+
assertThat(context).doesNotHaveBean(BravePropagator.class);
137+
});
138+
}
139+
129140
@Test
130141
void shouldNotSupplyBeansIfBraveIsMissing() {
131142
this.contextRunner.withClassLoader(new FilteredClassLoader("brave"))
@@ -535,4 +546,14 @@ io.micrometer.tracing.SpanCustomizer customMicrometerSpanCustomizer() {
535546

536547
}
537548

549+
@Configuration(proxyBeanMethods = false)
550+
static class PropagatorConfiguration {
551+
552+
@Bean
553+
Propagator customPropagator() {
554+
return mock(Propagator.class);
555+
}
556+
557+
}
558+
538559
}

module/spring-boot-micrometer-tracing-opentelemetry/build.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,9 @@ dependencies {
4949
dockerTestImplementation("org.testcontainers:testcontainers-junit-jupiter")
5050

5151
testImplementation(project(":core:spring-boot-test"))
52+
testImplementation(project(":module:spring-boot-micrometer-tracing-brave"))
5253
testImplementation(project(":test-support:spring-boot-test-support"))
54+
testImplementation("io.micrometer:micrometer-tracing-bridge-brave")
5355
testImplementation("com.squareup.okhttp3:mockwebserver")
5456
testImplementation("io.micrometer:micrometer-registry-prometheus")
5557
testImplementation("io.opentelemetry:opentelemetry-exporter-common")

module/spring-boot-micrometer-tracing-opentelemetry/src/main/java/org/springframework/boot/micrometer/tracing/opentelemetry/autoconfigure/OpenTelemetryTracingAutoConfiguration.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import io.micrometer.tracing.otel.bridge.OtelTracer;
3232
import io.micrometer.tracing.otel.bridge.OtelTracer.EventPublisher;
3333
import io.micrometer.tracing.otel.bridge.Slf4JEventListener;
34+
import io.micrometer.tracing.propagation.Propagator;
3435
import io.opentelemetry.api.OpenTelemetry;
3536
import io.opentelemetry.api.metrics.MeterProvider;
3637
import io.opentelemetry.api.trace.Tracer;
@@ -164,7 +165,7 @@ OtelTracer micrometerOtelTracer(Tracer tracer, EventPublisher eventPublisher,
164165
}
165166

166167
@Bean
167-
@ConditionalOnMissingBean
168+
@ConditionalOnMissingBean(Propagator.class)
168169
OtelPropagator otelPropagator(ContextPropagators contextPropagators, Tracer tracer) {
169170
return new OtelPropagator(contextPropagators, tracer);
170171
}

module/spring-boot-micrometer-tracing-opentelemetry/src/test/java/org/springframework/boot/micrometer/tracing/opentelemetry/autoconfigure/OpenTelemetryTracingAutoConfigurationTests.java

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828

2929
import io.micrometer.tracing.SpanCustomizer;
3030
import io.micrometer.tracing.Tracer.SpanInScope;
31+
import io.micrometer.tracing.handler.PropagatingReceiverTracingObservationHandler;
32+
import io.micrometer.tracing.handler.PropagatingSenderTracingObservationHandler;
3133
import io.micrometer.tracing.otel.bridge.EventListener;
3234
import io.micrometer.tracing.otel.bridge.OtelCurrentTraceContext;
3335
import io.micrometer.tracing.otel.bridge.OtelPropagator;
@@ -37,6 +39,7 @@
3739
import io.micrometer.tracing.otel.bridge.Slf4JBaggageEventListener;
3840
import io.micrometer.tracing.otel.bridge.Slf4JEventListener;
3941
import io.micrometer.tracing.otel.propagation.BaggageTextMapPropagator;
42+
import io.micrometer.tracing.propagation.Propagator;
4043
import io.opentelemetry.api.common.AttributeKey;
4144
import io.opentelemetry.api.common.Attributes;
4245
import io.opentelemetry.api.metrics.MeterProvider;
@@ -63,6 +66,8 @@
6366
import org.springframework.boot.autoconfigure.AutoConfigurations;
6467
import org.springframework.boot.micrometer.observation.autoconfigure.ObservationAutoConfiguration;
6568
import org.springframework.boot.micrometer.tracing.autoconfigure.MicrometerTracingAutoConfiguration;
69+
import org.springframework.boot.micrometer.tracing.brave.autoconfigure.BraveAutoConfiguration;
70+
import org.springframework.boot.opentelemetry.autoconfigure.OpenTelemetrySdkAutoConfiguration;
6671
import org.springframework.boot.test.context.FilteredClassLoader;
6772
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
6873
import org.springframework.boot.testsupport.classpath.ForkedClassPath;
@@ -88,8 +93,7 @@
8893
class OpenTelemetryTracingAutoConfigurationTests {
8994

9095
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
91-
.withConfiguration(AutoConfigurations.of(
92-
org.springframework.boot.opentelemetry.autoconfigure.OpenTelemetrySdkAutoConfiguration.class,
96+
.withConfiguration(AutoConfigurations.of(OpenTelemetrySdkAutoConfiguration.class,
9397
OpenTelemetryTracingAutoConfiguration.class));
9498

9599
@Test
@@ -178,6 +182,29 @@ void shouldBackOffOnCustomBeans() {
178182
});
179183
}
180184

185+
@Test
186+
void shouldNotSupplyOtelPropagatorWhenPropagatorBeanIsPresent() {
187+
this.contextRunner.withUserConfiguration(PropagatorConfiguration.class).run((context) -> {
188+
assertThat(context).hasSingleBean(Propagator.class);
189+
assertThat(context).hasBean("customPropagator");
190+
assertThat(context).doesNotHaveBean(OtelPropagator.class);
191+
});
192+
}
193+
194+
@Test
195+
void shouldWorkWithBraveAutoConfigurationWhenBothConfigurationsAreOnClasspath() {
196+
new ApplicationContextRunner()
197+
.withConfiguration(AutoConfigurations.of(OpenTelemetrySdkAutoConfiguration.class,
198+
OpenTelemetryTracingAutoConfiguration.class, BraveAutoConfiguration.class,
199+
ObservationAutoConfiguration.class, MicrometerTracingAutoConfiguration.class))
200+
.run((context) -> {
201+
assertThat(context).hasSingleBean(io.micrometer.tracing.Tracer.class);
202+
assertThat(context).hasSingleBean(Propagator.class);
203+
assertThat(context).hasSingleBean(PropagatingSenderTracingObservationHandler.class);
204+
assertThat(context).hasSingleBean(PropagatingReceiverTracingObservationHandler.class);
205+
});
206+
}
207+
181208
@Test
182209
void shouldSetupDefaultResourceAttributes() {
183210
this.contextRunner
@@ -521,6 +548,16 @@ SpanCustomizer customSpanCustomizer() {
521548

522549
}
523550

551+
@Configuration(proxyBeanMethods = false)
552+
static class PropagatorConfiguration {
553+
554+
@Bean
555+
Propagator customPropagator() {
556+
return mock(Propagator.class);
557+
}
558+
559+
}
560+
524561
@Configuration(proxyBeanMethods = false)
525562
private static final class SdkTracerProviderCustomizationConfiguration {
526563

0 commit comments

Comments
 (0)