diff --git a/spring-cloud-sleuth-autoconfigure/src/main/java/org/springframework/cloud/sleuth/autoconfig/instrument/redis/TraceRedisAutoConfiguration.java b/spring-cloud-sleuth-autoconfigure/src/main/java/org/springframework/cloud/sleuth/autoconfig/instrument/redis/TraceRedisAutoConfiguration.java index b6e89a72d..3e798db1d 100644 --- a/spring-cloud-sleuth-autoconfigure/src/main/java/org/springframework/cloud/sleuth/autoconfig/instrument/redis/TraceRedisAutoConfiguration.java +++ b/spring-cloud-sleuth-autoconfigure/src/main/java/org/springframework/cloud/sleuth/autoconfig/instrument/redis/TraceRedisAutoConfiguration.java @@ -19,13 +19,16 @@ package org.springframework.cloud.sleuth.autoconfig.instrument.redis; import brave.sampler.Sampler; import io.lettuce.core.tracing.Tracing; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.cloud.sleuth.Tracer; +import org.springframework.cloud.sleuth.autoconfig.brave.BraveAutoConfiguration; import org.springframework.cloud.sleuth.autoconfig.brave.instrument.redis.TraceRedisProperties; import org.springframework.cloud.sleuth.instrument.redis.TraceLettuceClientResourcesBuilderCustomizer; import org.springframework.context.annotation.Bean; @@ -43,21 +46,29 @@ import org.springframework.context.annotation.Configuration; @ConditionalOnBean(Tracer.class) @ConditionalOnClass(Tracing.class) @AutoConfigureBefore({ RedisAutoConfiguration.class }) +@AutoConfigureAfter(BraveAutoConfiguration.class) @EnableConfigurationProperties(TraceRedisProperties.class) public class TraceRedisAutoConfiguration { @Configuration(proxyBeanMethods = false) @ConditionalOnProperty(value = "spring.sleuth.redis.legacy.enabled", havingValue = "false", matchIfMissing = true) + @ConditionalOnBean(Tracing.class) static class LettuceConfiguration { @Bean - @ConditionalOnBean(Tracing.class) - TraceLettuceClientResourcesBuilderCustomizer traceLettuceClientResourcesBuilderCustomizer(Tracing tracing, + @ConditionalOnClass(name = "brave.sampler.Sampler") + TraceLettuceClientResourcesBuilderCustomizer braveTraceLettuceClientResourcesBuilderCustomizer(Tracing tracing, Sampler sampler) { eagerlyInitializePotentiallyRefreshScopeSampler(sampler); return new TraceLettuceClientResourcesBuilderCustomizer(tracing); } + @Bean + @ConditionalOnMissingClass("brave.sampler.Sampler") + TraceLettuceClientResourcesBuilderCustomizer otherTracersTraceLettuceClientResourcesBuilderCustomizer(Tracing tracing) { + return new TraceLettuceClientResourcesBuilderCustomizer(tracing); + } + /** * We need to do the eager method invocation. Since this might be @RefreshScope, a * proxy is being created. Trying to resolve the proxy from a different thread