Skip to content

Commit 5f6b63e

Browse files
committed
Auto-configure span customizer beans
Closes gh-33087
1 parent e5a0b16 commit 5f6b63e

File tree

4 files changed

+52
-0
lines changed

4 files changed

+52
-0
lines changed

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
import java.util.Collections;
2020
import java.util.List;
2121

22+
import brave.CurrentSpanCustomizer;
23+
import brave.SpanCustomizer;
2224
import brave.Tracer;
2325
import brave.Tracing;
2426
import brave.Tracing.Builder;
@@ -52,6 +54,7 @@
5254
import io.micrometer.tracing.brave.bridge.BraveHttpClientHandler;
5355
import io.micrometer.tracing.brave.bridge.BraveHttpServerHandler;
5456
import io.micrometer.tracing.brave.bridge.BravePropagator;
57+
import io.micrometer.tracing.brave.bridge.BraveSpanCustomizer;
5558
import io.micrometer.tracing.brave.bridge.BraveTracer;
5659
import io.micrometer.tracing.brave.bridge.CompositeSpanHandler;
5760
import io.micrometer.tracing.brave.bridge.W3CPropagation;
@@ -185,6 +188,18 @@ BraveHttpClientHandler braveHttpClientHandler(
185188
return new BraveHttpClientHandler(httpClientHandler);
186189
}
187190

191+
@Bean
192+
@ConditionalOnMissingBean(SpanCustomizer.class)
193+
CurrentSpanCustomizer currentSpanCustomizer(Tracing tracing) {
194+
return CurrentSpanCustomizer.create(tracing);
195+
}
196+
197+
@Bean
198+
@ConditionalOnMissingBean(io.micrometer.tracing.SpanCustomizer.class)
199+
BraveSpanCustomizer braveSpanCustomizer(SpanCustomizer spanCustomizer) {
200+
return new BraveSpanCustomizer(spanCustomizer);
201+
}
202+
188203
@Configuration(proxyBeanMethods = false)
189204
@ConditionalOnProperty(value = "management.tracing.baggage.enabled", havingValue = "false")
190205
static class BraveNoBaggageConfiguration {

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import java.util.regex.Pattern;
2222

2323
import io.micrometer.tracing.SamplerFunction;
24+
import io.micrometer.tracing.SpanCustomizer;
2425
import io.micrometer.tracing.otel.bridge.DefaultHttpClientAttributesGetter;
2526
import io.micrometer.tracing.otel.bridge.DefaultHttpServerAttributesExtractor;
2627
import io.micrometer.tracing.otel.bridge.EventListener;
@@ -30,6 +31,7 @@
3031
import io.micrometer.tracing.otel.bridge.OtelHttpClientHandler;
3132
import io.micrometer.tracing.otel.bridge.OtelHttpServerHandler;
3233
import io.micrometer.tracing.otel.bridge.OtelPropagator;
34+
import io.micrometer.tracing.otel.bridge.OtelSpanCustomizer;
3335
import io.micrometer.tracing.otel.bridge.OtelTracer;
3436
import io.micrometer.tracing.otel.bridge.OtelTracer.EventPublisher;
3537
import io.micrometer.tracing.otel.bridge.Slf4JBaggageEventListener;
@@ -182,6 +184,12 @@ Slf4JEventListener otelSlf4JEventListener() {
182184
return new Slf4JEventListener();
183185
}
184186

187+
@Bean
188+
@ConditionalOnMissingBean(SpanCustomizer.class)
189+
OtelSpanCustomizer otelSpanCustomizer() {
190+
return new OtelSpanCustomizer();
191+
}
192+
185193
@Configuration(proxyBeanMethods = false)
186194
@ConditionalOnProperty(prefix = "management.tracing.baggage", name = "enabled", matchIfMissing = true)
187195
static class BaggageConfiguration {

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

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.util.Collections;
2020

2121
import brave.Span;
22+
import brave.SpanCustomizer;
2223
import brave.Tracer;
2324
import brave.Tracing;
2425
import brave.baggage.BaggagePropagation;
@@ -39,6 +40,7 @@
3940
import io.micrometer.tracing.brave.bridge.BraveBaggageManager;
4041
import io.micrometer.tracing.brave.bridge.BraveHttpClientHandler;
4142
import io.micrometer.tracing.brave.bridge.BraveHttpServerHandler;
43+
import io.micrometer.tracing.brave.bridge.BraveSpanCustomizer;
4244
import io.micrometer.tracing.brave.bridge.BraveTracer;
4345
import io.micrometer.tracing.brave.bridge.CompositeSpanHandler;
4446
import io.micrometer.tracing.brave.bridge.W3CPropagation;
@@ -91,6 +93,8 @@ void shouldSupplyDefaultBeans() {
9193
assertThat(context).hasSingleBean(BraveHttpServerHandler.class);
9294
assertThat(context).hasSingleBean(BraveHttpClientHandler.class);
9395
assertThat(context).hasSingleBean(CompositeSpanHandler.class);
96+
assertThat(context).hasSingleBean(SpanCustomizer.class);
97+
assertThat(context).hasSingleBean(BraveSpanCustomizer.class);
9498
});
9599
}
96100

@@ -127,6 +131,10 @@ void shouldBackOffOnCustomBeans() {
127131
assertThat(context).hasSingleBean(HttpClientHandler.class);
128132
assertThat(context).hasBean("customCompositeSpanHandler");
129133
assertThat(context).hasSingleBean(CompositeSpanHandler.class);
134+
assertThat(context).hasBean("customSpanCustomizer");
135+
assertThat(context).hasSingleBean(SpanCustomizer.class);
136+
assertThat(context).hasBean("customMicrometerSpanCustomizer");
137+
assertThat(context).hasSingleBean(io.micrometer.tracing.SpanCustomizer.class);
130138
});
131139
}
132140

@@ -421,6 +429,16 @@ CompositeSpanHandler customCompositeSpanHandler() {
421429
return new CompositeSpanHandler(Collections.emptyList(), Collections.emptyList(), Collections.emptyList());
422430
}
423431

432+
@Bean
433+
SpanCustomizer customSpanCustomizer() {
434+
return mock(SpanCustomizer.class);
435+
}
436+
437+
@Bean
438+
io.micrometer.tracing.SpanCustomizer customMicrometerSpanCustomizer() {
439+
return mock(io.micrometer.tracing.SpanCustomizer.class);
440+
}
441+
424442
}
425443

426444
}

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,12 @@
1919
import java.util.Collection;
2020
import java.util.List;
2121

22+
import io.micrometer.tracing.SpanCustomizer;
2223
import io.micrometer.tracing.otel.bridge.OtelCurrentTraceContext;
2324
import io.micrometer.tracing.otel.bridge.OtelHttpClientHandler;
2425
import io.micrometer.tracing.otel.bridge.OtelHttpServerHandler;
2526
import io.micrometer.tracing.otel.bridge.OtelPropagator;
27+
import io.micrometer.tracing.otel.bridge.OtelSpanCustomizer;
2628
import io.micrometer.tracing.otel.bridge.OtelTracer;
2729
import io.micrometer.tracing.otel.bridge.OtelTracer.EventPublisher;
2830
import io.micrometer.tracing.otel.bridge.Slf4JBaggageEventListener;
@@ -78,6 +80,7 @@ void shouldSupplyBeans() {
7880
assertThat(context).hasSingleBean(SpanProcessor.class);
7981
assertThat(context).hasSingleBean(OtelPropagator.class);
8082
assertThat(context).hasSingleBean(TextMapPropagator.class);
83+
assertThat(context).hasSingleBean(OtelSpanCustomizer.class);
8184
});
8285
}
8386

@@ -100,6 +103,7 @@ void shouldNotSupplyBeansIfDependencyIsMissing(String packageName) {
100103
assertThat(context).doesNotHaveBean(SpanProcessor.class);
101104
assertThat(context).doesNotHaveBean(OtelPropagator.class);
102105
assertThat(context).doesNotHaveBean(TextMapPropagator.class);
106+
assertThat(context).doesNotHaveBean(OtelSpanCustomizer.class);
103107
});
104108
}
105109

@@ -132,6 +136,8 @@ void shouldBackOffOnCustomBeans() {
132136
assertThat(context).hasSingleBean(Slf4JBaggageEventListener.class);
133137
assertThat(context).hasBean("customOtelPropagator");
134138
assertThat(context).hasSingleBean(OtelPropagator.class);
139+
assertThat(context).hasBean("customSpanCustomizer");
140+
assertThat(context).hasSingleBean(SpanCustomizer.class);
135141
});
136142
}
137143

@@ -275,6 +281,11 @@ TextMapPropagator customTextMapPropagator() {
275281
return mock(TextMapPropagator.class);
276282
}
277283

284+
@Bean
285+
SpanCustomizer customSpanCustomizer() {
286+
return mock(SpanCustomizer.class);
287+
}
288+
278289
}
279290

280291
}

0 commit comments

Comments
 (0)