Browse Source

RestTemplateCustomizer to customize the @LoadBalanced RestTemplate.

By default, creates a RestTemplateCustomizer adds a LoadBalancerInterceptor

fixes gh-16
pull/17/head
Spencer Gibb 10 years ago
parent
commit
64d7a57190
  1. 20
      spring-cloud-commons/src/main/java/org/springframework/cloud/client/loadbalancer/LoadBalancerAutoConfiguration.java
  2. 7
      spring-cloud-commons/src/main/java/org/springframework/cloud/client/loadbalancer/LoadBalancerInterceptor.java
  3. 10
      spring-cloud-commons/src/main/java/org/springframework/cloud/client/loadbalancer/RestTemplateCustomizer.java

20
spring-cloud-commons/src/main/java/org/springframework/cloud/client/loadbalancer/LoadBalancerAutoConfiguration.java

@ -21,6 +21,7 @@ import java.util.List; @@ -21,6 +21,7 @@ import java.util.List;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestInterceptor;
@ -39,14 +40,25 @@ public class LoadBalancerAutoConfiguration { @@ -39,14 +40,25 @@ public class LoadBalancerAutoConfiguration {
@Bean
@LoadBalanced
public RestTemplate loadBalancedRestTemplate(LoadBalancerInterceptor loadBalancerInterceptor) {
public RestTemplate loadBalancedRestTemplate(RestTemplateCustomizer customizer) {
RestTemplate restTemplate = new RestTemplate();
List<ClientHttpRequestInterceptor> list = new ArrayList<>();
list.add(loadBalancerInterceptor);
restTemplate.setInterceptors(list);
customizer.customize(restTemplate);
return restTemplate;
}
@Bean
@ConditionalOnMissingBean
public RestTemplateCustomizer restTemplateCustomizer(final LoadBalancerInterceptor loadBalancerInterceptor) {
return new RestTemplateCustomizer() {
@Override
public void customize(RestTemplate restTemplate) {
List<ClientHttpRequestInterceptor> list = new ArrayList<>();
list.add(loadBalancerInterceptor);
restTemplate.setInterceptors(list);
}
};
}
@Bean
public LoadBalancerInterceptor ribbonInterceptor(LoadBalancerClient loadBalancerClient) {
return new LoadBalancerInterceptor(loadBalancerClient);

7
spring-cloud-commons/src/main/java/org/springframework/cloud/client/loadbalancer/LoadBalancerInterceptor.java

@ -34,8 +34,6 @@ public class LoadBalancerInterceptor implements ClientHttpRequestInterceptor { @@ -34,8 +34,6 @@ public class LoadBalancerInterceptor implements ClientHttpRequestInterceptor {
private LoadBalancerClient loadBalancer;
private static final ThreadLocal<ServiceInstance> instanceHolder = new ThreadLocal<>();
public LoadBalancerInterceptor(LoadBalancerClient loadBalancer) {
this.loadBalancer = loadBalancer;
}
@ -51,7 +49,6 @@ public class LoadBalancerInterceptor implements ClientHttpRequestInterceptor { @@ -51,7 +49,6 @@ public class LoadBalancerInterceptor implements ClientHttpRequestInterceptor {
@Override
public ClientHttpResponse apply(final ServiceInstance instance)
throws Exception {
instanceHolder.set(instance);
HttpRequest serviceRequest = new ServiceRequestWrapper(request,
instance);
return execution.execute(serviceRequest, body);
@ -78,8 +75,4 @@ public class LoadBalancerInterceptor implements ClientHttpRequestInterceptor { @@ -78,8 +75,4 @@ public class LoadBalancerInterceptor implements ClientHttpRequestInterceptor {
}
public static ServiceInstance getThreadLocalServiceInstance() {
return instanceHolder.get();
}
}

10
spring-cloud-commons/src/main/java/org/springframework/cloud/client/loadbalancer/RestTemplateCustomizer.java

@ -0,0 +1,10 @@ @@ -0,0 +1,10 @@
package org.springframework.cloud.client.loadbalancer;
import org.springframework.web.client.RestTemplate;
/**
* @author Spencer Gibb
*/
public interface RestTemplateCustomizer {
void customize(RestTemplate restTemplate);
}
Loading…
Cancel
Save