Added an example with custom rest template builder

This commit is contained in:
Marcin Grzejszczak
2018-02-12 13:30:50 +01:00
parent d62756e3b1
commit 33fda4e700
2 changed files with 29 additions and 9 deletions

View File

@@ -81,12 +81,7 @@ public class TraceWebClientAutoConfiguration {
@Bean @Bean
@Order @Order
RestTemplateCustomizer traceRestTemplateCustomizer() { RestTemplateCustomizer traceRestTemplateCustomizer() {
return new RestTemplateCustomizer() { return new TraceRestTemplateCustomizer(this.traceRestTemplateInterceptor);
@Override public void customize(RestTemplate restTemplate) {
new RestTemplateInterceptorInjector(TraceInterceptorConfiguration.this.traceRestTemplateInterceptor)
.inject(restTemplate);
}
};
} }
@PostConstruct @PostConstruct
@@ -174,6 +169,20 @@ class RestTemplateInterceptorInjector {
} }
} }
class TraceRestTemplateCustomizer implements RestTemplateCustomizer {
private final TraceRestTemplateInterceptor interceptor;
TraceRestTemplateCustomizer(TraceRestTemplateInterceptor interceptor) {
this.interceptor = interceptor;
}
@Override public void customize(RestTemplate restTemplate) {
new RestTemplateInterceptorInjector(this.interceptor)
.inject(restTemplate);
}
}
class TraceUserInfoRestTemplateCustomizer implements UserInfoRestTemplateCustomizer { class TraceUserInfoRestTemplateCustomizer implements UserInfoRestTemplateCustomizer {
private final BeanFactory beanFactory; private final BeanFactory beanFactory;

View File

@@ -18,7 +18,6 @@ package org.springframework.cloud.sleuth.instrument.web.client;
import java.io.IOException; import java.io.IOException;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections;
import java.util.List; import java.util.List;
import org.junit.Test; import org.junit.Test;
@@ -49,11 +48,13 @@ public class TraceWebClientAutoConfigurationTests {
@Autowired @Qualifier("firstRestTemplate") RestTemplate restTemplate; @Autowired @Qualifier("firstRestTemplate") RestTemplate restTemplate;
@Autowired @Qualifier("secondRestTemplate") RestTemplate secondRestTemplate; @Autowired @Qualifier("secondRestTemplate") RestTemplate secondRestTemplate;
@Autowired RestTemplateBuilder builder;
@Test @Test
public void should_add_rest_template_interceptors() { public void should_add_rest_template_interceptors() {
assertInterceptorsOrder(assertInterceptorsNotEmpty(this.restTemplate)); assertInterceptorsOrder(assertInterceptorsNotEmpty(this.restTemplate));
assertInterceptorsOrder(assertInterceptorsNotEmpty(this.secondRestTemplate)); assertInterceptorsOrder(assertInterceptorsNotEmpty(this.secondRestTemplate));
assertInterceptorsOrder(assertInterceptorsNotEmpty(this.builder.build()));
} }
private List<ClientHttpRequestInterceptor> assertInterceptorsNotEmpty(RestTemplate restTemplate) { private List<ClientHttpRequestInterceptor> assertInterceptorsNotEmpty(RestTemplate restTemplate) {
@@ -88,14 +89,23 @@ public class TraceWebClientAutoConfigurationTests {
@EnableAutoConfiguration @EnableAutoConfiguration
static class Config { static class Config {
// custom builder
@Bean
RestTemplateBuilder myRestTemplateBuilder(List<RestTemplateCustomizer> customizers) {
return new RestTemplateBuilder()
.additionalCustomizers(customizers)
.additionalInterceptors(new MyClientHttpRequestInterceptor());
}
// rest template from builder
@Bean @Bean
@Qualifier("firstRestTemplate") @Qualifier("firstRestTemplate")
RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder) { RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder) {
return restTemplateBuilder return restTemplateBuilder
.additionalInterceptors(new MyClientHttpRequestInterceptor())
.build(); .build();
} }
// manual rest template
@Bean @Bean
@Qualifier("secondRestTemplate") @Qualifier("secondRestTemplate")
RestTemplate secondRestTemplate() { RestTemplate secondRestTemplate() {
@@ -106,6 +116,7 @@ public class TraceWebClientAutoConfigurationTests {
return restTemplate; return restTemplate;
} }
// custom customizer
@Bean @Bean
RestTemplateCustomizer myRestTemplateCustomizer() { RestTemplateCustomizer myRestTemplateCustomizer() {
return restTemplate -> { return restTemplate -> {