From 16c576c557f4aa862f4f8bf6d5e1c10bb9227d85 Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Tue, 17 Dec 2019 08:54:54 +0100 Subject: [PATCH] Making Redis instrumentation lazy; fixes gh-1508 --- .../redis/TraceRedisAutoConfiguration.java | 22 ++++++++++++++----- .../TraceRedisAutoConfigurationTests.java | 10 ++++----- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/redis/TraceRedisAutoConfiguration.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/redis/TraceRedisAutoConfiguration.java index 25688b632..d78df8224 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/redis/TraceRedisAutoConfiguration.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/redis/TraceRedisAutoConfiguration.java @@ -23,6 +23,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.BeansException; +import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.config.BeanPostProcessor; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; @@ -51,8 +52,8 @@ public class TraceRedisAutoConfiguration { @Bean static TraceLettuceClientResourcesBeanPostProcessor traceLettuceClientResourcesBeanPostProcessor( - Tracing tracing, TraceRedisProperties traceRedisProperties) { - return new TraceLettuceClientResourcesBeanPostProcessor(tracing, + BeanFactory beanFactory, TraceRedisProperties traceRedisProperties) { + return new TraceLettuceClientResourcesBeanPostProcessor(beanFactory, traceRedisProperties); } @@ -65,13 +66,15 @@ class TraceLettuceClientResourcesBeanPostProcessor implements BeanPostProcessor private static final Log log = LogFactory .getLog(TraceLettuceClientResourcesBeanPostProcessor.class); - private final Tracing tracing; + private final BeanFactory beanFactory; private final TraceRedisProperties traceRedisProperties; - TraceLettuceClientResourcesBeanPostProcessor(Tracing tracing, + private Tracing tracing; + + TraceLettuceClientResourcesBeanPostProcessor(BeanFactory beanFactory, TraceRedisProperties traceRedisProperties) { - this.tracing = tracing; + this.beanFactory = beanFactory; this.traceRedisProperties = traceRedisProperties; } @@ -91,7 +94,7 @@ class TraceLettuceClientResourcesBeanPostProcessor implements BeanPostProcessor log.debug( "Lettuce ClientResources bean is auto-configured to enable tracing."); } - BraveTracing lettuceTracing = BraveTracing.builder().tracing(this.tracing) + BraveTracing lettuceTracing = BraveTracing.builder().tracing(tracing()) .excludeCommandArgsFromSpanTags() .serviceName(traceRedisProperties.getRemoteServiceName()).build(); return cr.mutate().tracing(lettuceTracing).build(); @@ -104,4 +107,11 @@ class TraceLettuceClientResourcesBeanPostProcessor implements BeanPostProcessor return bean; } + private Tracing tracing() { + if (this.tracing == null) { + this.tracing = this.beanFactory.getBean(Tracing.class); + } + return this.tracing; + } + } diff --git a/tests/spring-cloud-sleuth-instrumentation-lettuce-tests/src/test/java/org/springframework/cloud/sleuth/instrument/redis/TraceRedisAutoConfigurationTests.java b/tests/spring-cloud-sleuth-instrumentation-lettuce-tests/src/test/java/org/springframework/cloud/sleuth/instrument/redis/TraceRedisAutoConfigurationTests.java index f245d2506..872065b7b 100644 --- a/tests/spring-cloud-sleuth-instrumentation-lettuce-tests/src/test/java/org/springframework/cloud/sleuth/instrument/redis/TraceRedisAutoConfigurationTests.java +++ b/tests/spring-cloud-sleuth-instrumentation-lettuce-tests/src/test/java/org/springframework/cloud/sleuth/instrument/redis/TraceRedisAutoConfigurationTests.java @@ -16,12 +16,12 @@ package org.springframework.cloud.sleuth.instrument.redis; -import brave.Tracing; import io.lettuce.core.resource.ClientResources; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.BeansException; +import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; @@ -72,8 +72,8 @@ public class TraceRedisAutoConfigurationTests { @Bean TestTraceLettuceClientResourcesBeanPostProcessor testTraceLettuceClientResourcesBeanPostProcessor( - Tracing tracing, TraceRedisProperties traceRedisProperties) { - return new TestTraceLettuceClientResourcesBeanPostProcessor(tracing, + BeanFactory beanFactory, TraceRedisProperties traceRedisProperties) { + return new TestTraceLettuceClientResourcesBeanPostProcessor(beanFactory, traceRedisProperties); } @@ -86,9 +86,9 @@ class TestTraceLettuceClientResourcesBeanPostProcessor boolean tracingCalled = false; - TestTraceLettuceClientResourcesBeanPostProcessor(Tracing tracing, + TestTraceLettuceClientResourcesBeanPostProcessor(BeanFactory beanFactory, TraceRedisProperties traceRedisProperties) { - super(tracing, traceRedisProperties); + super(beanFactory, traceRedisProperties); } @Override