diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/autoconfig/TraceAutoConfiguration.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/autoconfig/TraceAutoConfiguration.java index e19352069..d6f0ee5e9 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/autoconfig/TraceAutoConfiguration.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/autoconfig/TraceAutoConfiguration.java @@ -152,7 +152,9 @@ public class TraceAutoConfiguration { Propagation.Factory sleuthPropagation(SleuthProperties sleuthProperties) { if (sleuthProperties.getBaggageKeys().isEmpty() && sleuthProperties.getPropagationKeys().isEmpty() - && extraFieldCustomizers.isEmpty()) { + && extraFieldCustomizers.isEmpty() + && this.extraFieldPropagationFactoryBuilder == null + && sleuthProperties.getLocalKeys().isEmpty()) { return B3Propagation.FACTORY; } ExtraFieldPropagation.FactoryBuilder factoryBuilder; diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/autoconfig/TraceAutoConfigurationTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/autoconfig/TraceAutoConfigurationTests.java index d96e722e0..5b4b74ce7 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/autoconfig/TraceAutoConfigurationTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/autoconfig/TraceAutoConfigurationTests.java @@ -16,6 +16,9 @@ package org.springframework.cloud.sleuth.autoconfig; +import brave.propagation.B3Propagation; +import brave.propagation.ExtraFieldPropagation; +import brave.propagation.Propagation; import io.micrometer.core.instrument.MeterRegistry; import io.micrometer.core.instrument.simple.SimpleMeterRegistry; import org.assertj.core.api.BDDAssertions; @@ -65,6 +68,31 @@ public class TraceAutoConfigurationTests { }); } + @Test + public void should_use_B3Propagation_factory_if_no_have_any_config() { + this.contextRunner.run((context -> { + final Propagation.Factory bean = context.getBean(Propagation.Factory.class); + BDDAssertions.then(bean).isInstanceOf(Propagation.Factory.class); + })); + } + + @Test + public void should_use_local_keys_from_properties() { + this.contextRunner.withUserConfiguration(WithLocalKeys.class).run((context -> { + final Propagation.Factory bean = context.getBean(Propagation.Factory.class); + BDDAssertions.then(bean).isInstanceOf(ExtraFieldPropagation.Factory.class); + })); + } + + @Test + public void should_use_extraFieldPropagationFactoryBuilder_bean() { + this.contextRunner.withUserConfiguration(WithExtraFieldPropagationFactoryBuilderBean.class) + .run((context -> { + final Propagation.Factory bean = context.getBean(Propagation.Factory.class); + BDDAssertions.then(bean).isInstanceOf(ExtraFieldPropagation.Factory.class); + })); + } + @Configuration static class WithMeterRegistry { @@ -75,4 +103,25 @@ public class TraceAutoConfigurationTests { } + @Configuration + static class WithLocalKeys { + + @Bean + SleuthProperties sleuthProperties() { + final SleuthProperties sleuthProperties = new SleuthProperties(); + sleuthProperties.getLocalKeys().add("test-key"); + return sleuthProperties; + } + } + + @Configuration + static class WithExtraFieldPropagationFactoryBuilderBean { + + @Bean + ExtraFieldPropagation.FactoryBuilder extraFieldPropagationFactoryBuilderBean() { + return ExtraFieldPropagation + .newFactoryBuilder(B3Propagation.FACTORY); + } + } + }