diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/tracing/OpenTelemetryAutoConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/tracing/OpenTelemetryAutoConfiguration.java index 147d86a8a7..688adcf76b 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/tracing/OpenTelemetryAutoConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/tracing/OpenTelemetryAutoConfiguration.java @@ -102,13 +102,13 @@ public class OpenTelemetryAutoConfiguration { @Bean @ConditionalOnMissingBean SdkTracerProvider otelSdkTracerProvider(Environment environment, ObjectProvider spanProcessors, - Sampler sampler, ObjectProvider customizers) { + Sampler sampler, ObjectProvider customizers) { String applicationName = environment.getProperty("spring.application.name", DEFAULT_APPLICATION_NAME); SdkTracerProviderBuilder builder = SdkTracerProvider.builder() .setSampler(sampler) .setResource(Resource.create(Attributes.of(ResourceAttributes.SERVICE_NAME, applicationName))); spanProcessors.orderedStream().forEach(builder::addSpanProcessor); - customizers.forEach((customizer) -> customizer.customize(builder)); + customizers.orderedStream().forEach((customizer) -> customizer.customize(builder)); return builder.build(); } diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/tracing/SdkTracerProviderCustomizer.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/tracing/SdkTracerProviderBuilderCustomizer.java similarity index 78% rename from spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/tracing/SdkTracerProviderCustomizer.java rename to spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/tracing/SdkTracerProviderBuilderCustomizer.java index 16ece4e937..c72b52f576 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/tracing/SdkTracerProviderCustomizer.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/tracing/SdkTracerProviderBuilderCustomizer.java @@ -16,17 +16,18 @@ package org.springframework.boot.actuate.autoconfigure.tracing; +import io.opentelemetry.sdk.trace.SdkTracerProvider; import io.opentelemetry.sdk.trace.SdkTracerProviderBuilder; /** - * Callback interface that can be used to customize auto-configured - * {@link SdkTracerProviderBuilder}. + * Callback interface that can be used to customize the {@link SdkTracerProviderBuilder} + * that is used to create the auto-configured {@link SdkTracerProvider}. * * @author Yanming Zhou * @since 3.1.0 */ @FunctionalInterface -public interface SdkTracerProviderCustomizer { +public interface SdkTracerProviderBuilderCustomizer { /** * Customize the given {@code builder}. diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/tracing/OpenTelemetryAutoConfigurationTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/tracing/OpenTelemetryAutoConfigurationTests.java index 01e4d4bab6..a4803969e9 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/tracing/OpenTelemetryAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/tracing/OpenTelemetryAutoConfigurationTests.java @@ -46,6 +46,7 @@ import org.springframework.boot.test.context.FilteredClassLoader; import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.core.annotation.Order; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; @@ -210,6 +211,7 @@ class OpenTelemetryAutoConfigurationTests { this.contextRunner.withUserConfiguration(SdkTracerProviderCustomizationConfiguration.class).run((context) -> { SdkTracerProvider tracerProvider = context.getBean(SdkTracerProvider.class); assertThat(tracerProvider.getSpanLimits().getMaxNumberOfEvents()).isEqualTo(42); + assertThat(tracerProvider.getSampler()).isEqualTo(Sampler.alwaysOn()); }); } @@ -292,13 +294,23 @@ class OpenTelemetryAutoConfigurationTests { private static class SdkTracerProviderCustomizationConfiguration { @Bean - SdkTracerProviderCustomizer sdkTracerProviderBuilderCustomizer() { + @Order(1) + SdkTracerProviderBuilderCustomizer sdkTracerProviderBuilderCustomizerOne() { return (builder) -> { SpanLimits spanLimits = SpanLimits.builder().setMaxNumberOfEvents(42).build(); builder.setSpanLimits(spanLimits); }; } + @Bean + @Order(0) + SdkTracerProviderBuilderCustomizer sdkTracerProviderBuilderCustomizerTwo() { + return (builder) -> { + SpanLimits spanLimits = SpanLimits.builder().setMaxNumberOfEvents(21).build(); + builder.setSpanLimits(spanLimits).setSampler(Sampler.alwaysOn()); + }; + } + } }