Making Redis instrumentation lazy; fixes gh-1508

This commit is contained in:
Marcin Grzejszczak
2019-12-17 08:54:54 +01:00
parent 991ccd1c37
commit 16c576c557
2 changed files with 21 additions and 11 deletions

View File

@@ -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;
}
}

View File

@@ -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