From 465582d20cfc7b0082cd063818efb8a99b0f3906 Mon Sep 17 00:00:00 2001 From: Bertrand Renuart Date: Thu, 2 Mar 2017 16:32:04 +0100 Subject: [PATCH] Make sure MetricsRestTemplateAspectConfiguration is applied in time. `MetricsRestTemplateConfiguration` creates a BeanPostProcessor used to configure RestTemplate instances when added to the application context. It should be made @ConditionalOnClass(RestTemplate) instead of @ConditionalOnBean(RestTemplate) since it should be present *before* any RestTemplate bean instance is created. (#1747) fixes gh-1153 --- .../metrics/MetricsInterceptorConfiguration.java | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/metrics/MetricsInterceptorConfiguration.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/metrics/MetricsInterceptorConfiguration.java index a5364609..4352a5c1 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/metrics/MetricsInterceptorConfiguration.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/metrics/MetricsInterceptorConfiguration.java @@ -14,13 +14,15 @@ package org.springframework.cloud.netflix.metrics; import java.util.ArrayList; +import java.util.Collection; + +import javax.servlet.http.HttpServletRequest; import org.aspectj.lang.JoinPoint; import org.springframework.beans.BeansException; import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.config.BeanPostProcessor; import org.springframework.boot.actuate.metrics.reader.MetricReader; -import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; @@ -34,10 +36,9 @@ import org.springframework.web.client.RestTemplate; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; +import com.netflix.servo.MonitorRegistry; import com.netflix.servo.monitor.Monitors; -import java.util.Collection; - /** * @author Jon Schneider */ @@ -62,9 +63,8 @@ public class MetricsInterceptorConfiguration { } @Configuration - @ConditionalOnClass(JoinPoint.class) + @ConditionalOnClass({ RestTemplate.class, JoinPoint.class }) @ConditionalOnProperty(value = "spring.aop.enabled", havingValue = "true", matchIfMissing = true) - @ConditionalOnBean({ RestTemplate.class }) static class MetricsRestTemplateAspectConfiguration { @Bean @@ -75,8 +75,7 @@ public class MetricsInterceptorConfiguration { } @Configuration - @ConditionalOnBean({ RestTemplate.class }) - @ConditionalOnClass(name = "javax.servlet.http.HttpServletRequest") + @ConditionalOnClass({ RestTemplate.class, HttpServletRequest.class }) // HttpServletRequest implicitly required by MetricsTagProvider static class MetricsRestTemplateConfiguration { @Value("${netflix.metrics.restClient.metricName:restclient}")