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 936d665f6..810959960 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 @@ -70,6 +70,12 @@ public class TraceWebClientAutoConfiguration { @Autowired private TracingClientHttpRequestInterceptor clientInterceptor; + @Bean + @Order + RestTemplateCustomizer traceRestTemplateCustomizer() { + return new TraceRestTemplateCustomizer(this.clientInterceptor); + } + @PostConstruct public void init() { Map restTemplates = BeanFactoryUtils @@ -80,17 +86,6 @@ public class TraceWebClientAutoConfiguration { this.clientInterceptor).inject(restTemplate); } } - - @Bean - @Order - RestTemplateCustomizer traceRestTemplateCustomizer() { - return new RestTemplateCustomizer() { - @Override public void customize(RestTemplate restTemplate) { - new RestTemplateInterceptorInjector(TraceInterceptorConfiguration.this.clientInterceptor) - .inject(restTemplate); - } - }; - } } } @@ -130,4 +125,18 @@ class RestTemplateInterceptorInjector { } return false; } +} + +class TraceRestTemplateCustomizer implements RestTemplateCustomizer { + + private final TracingClientHttpRequestInterceptor interceptor; + + TraceRestTemplateCustomizer(TracingClientHttpRequestInterceptor interceptor) { + this.interceptor = interceptor; + } + + @Override public void customize(RestTemplate restTemplate) { + new RestTemplateInterceptorInjector(this.interceptor) + .inject(restTemplate); + } } \ No newline at end of file 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 5b86b68a8..13c7ca6e4 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 @@ -49,11 +49,13 @@ public class TraceWebClientAutoConfigurationTests { @Autowired @Qualifier("firstRestTemplate") RestTemplate restTemplate; @Autowired @Qualifier("secondRestTemplate") RestTemplate secondRestTemplate; + @Autowired RestTemplateBuilder builder; @Test public void should_add_rest_template_interceptors() { - assertInterceptorsOrder(assertInterceptorsNotEmpty(this.restTemplate)); + assertInterceptorsOrder(assertInterceptorsNotEmpty(this.restTemplate)); assertInterceptorsOrder(assertInterceptorsNotEmpty(this.secondRestTemplate)); + assertInterceptorsOrder(assertInterceptorsNotEmpty(this.builder.build())); } private List assertInterceptorsNotEmpty(RestTemplate restTemplate) { @@ -88,14 +90,23 @@ public class TraceWebClientAutoConfigurationTests { @EnableAutoConfiguration static class Config { + // custom builder + @Bean + RestTemplateBuilder myRestTemplateBuilder(List customizers) { + return new RestTemplateBuilder() + .additionalCustomizers(customizers) + .additionalInterceptors(new MyClientHttpRequestInterceptor()); + } + + // rest template from builder @Bean @Qualifier("firstRestTemplate") RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder) { return restTemplateBuilder - .additionalInterceptors(new MyClientHttpRequestInterceptor()) .build(); } + // manual rest template @Bean @Qualifier("secondRestTemplate") RestTemplate secondRestTemplate() { @@ -106,6 +117,7 @@ public class TraceWebClientAutoConfigurationTests { return restTemplate; } + // custom customizer @Bean RestTemplateCustomizer myRestTemplateCustomizer() { return restTemplate -> {