diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/TraceWebClientAutoConfiguration.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/TraceWebClientAutoConfiguration.java index cfae6daa6..916b589b4 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/TraceWebClientAutoConfiguration.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/TraceWebClientAutoConfiguration.java @@ -237,7 +237,7 @@ class RestTemplateInterceptorInjector { private boolean hasTraceInterceptor(RestTemplate restTemplate) { for (ClientHttpRequestInterceptor interceptor : restTemplate.getInterceptors()) { - if (interceptor instanceof TracingClientHttpRequestInterceptor) { + if (interceptor instanceof TracingClientHttpRequestInterceptor || interceptor instanceof LazyTracingClientHttpRequestInterceptor) { return true; } } diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/TraceWebClientAutoConfigurationTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/TraceWebClientAutoConfigurationTests.java index 586f1ad3f..3bf6ba104 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/TraceWebClientAutoConfigurationTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/TraceWebClientAutoConfigurationTests.java @@ -18,7 +18,10 @@ package org.springframework.cloud.sleuth.instrument.web.client; import java.io.IOException; import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.Map; import brave.spring.web.TracingClientHttpRequestInterceptor; import org.junit.Test; @@ -79,8 +82,10 @@ public class TraceWebClientAutoConfigurationTests { int traceInterceptorIndex = -1; int myInterceptorIndex = -1; int mySecondInterceptorIndex = -1; + Map numberOfInstances = new HashMap<>(); for (int i = 0; i < interceptors.size(); i++) { ClientHttpRequestInterceptor interceptor = interceptors.get(i); + incrementNumberOfInstances(numberOfInstances, interceptor); if (interceptor instanceof TracingClientHttpRequestInterceptor || interceptor instanceof LazyTracingClientHttpRequestInterceptor) { traceInterceptorIndex = i; @@ -94,6 +99,19 @@ public class TraceWebClientAutoConfigurationTests { } then(traceInterceptorIndex).isGreaterThanOrEqualTo(0) .isLessThan(myInterceptorIndex).isLessThan(mySecondInterceptorIndex); + then(numberOfInstances.values()) + .as("Can't have duplicate entries for interceptors") + .containsOnlyElementsOf(Collections.singletonList(1)); + } + + private void incrementNumberOfInstances(Map numberOfInstances, ClientHttpRequestInterceptor interceptor) { + Integer no = numberOfInstances.get(interceptor.getClass()); + if (no == null) { + numberOfInstances.put(interceptor.getClass(), 1); + } + else { + numberOfInstances.put(interceptor.getClass(), no + 1); + } } @Configuration