From f41edfd483dd2629fd6850359a46c5a977415b2b Mon Sep 17 00:00:00 2001 From: Dave Syer Date: Wed, 24 Sep 2014 15:18:58 +0100 Subject: [PATCH] Add conditional config guard for MBeanServer --- .../eureka/EurekaClientConfiguration.java | 30 +++++++++++-------- .../servo/ServoMetricsAutoConfiguration.java | 7 +++-- 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientConfiguration.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientConfiguration.java index 7b808c7de..f9eb86f79 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientConfiguration.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientConfiguration.java @@ -21,6 +21,7 @@ import javax.management.MBeanServer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; @@ -56,10 +57,11 @@ import com.netflix.discovery.EurekaClientConfig; public class EurekaClientConfiguration implements ApplicationListener, SmartLifecycle, Ordered { - private static final Logger logger = LoggerFactory.getLogger(EurekaClientConfiguration.class); + private static final Logger logger = LoggerFactory + .getLogger(EurekaClientConfiguration.class); private boolean running; - + private int order = 0; @Autowired @@ -70,16 +72,17 @@ public class EurekaClientConfiguration implements @Override public void onApplicationEvent(ContextRefreshedEvent event) { - logger.info("Registering application {} with eureka with status UP", instanceConfig.getAppname()); + logger.info("Registering application {} with eureka with status UP", + instanceConfig.getAppname()); ApplicationInfoManager.getInstance().setInstanceStatus(InstanceStatus.UP); } @PreDestroy public void close() { - logger.info("Removing application {} from eureka", instanceConfig.getAppname()); + logger.info("Removing application {} from eureka", instanceConfig.getAppname()); DiscoveryManager.getInstance().shutdownComponent(); } - + @Override public void start() { DiscoveryManager.getInstance().initComponent(instanceConfig, clientConfig); @@ -109,23 +112,26 @@ public class EurekaClientConfiguration implements public void stop(Runnable callback) { callback.run(); } - + @Override public int getOrder() { return order; } - + @Bean @Lazy - @Scope(proxyMode=ScopedProxyMode.TARGET_CLASS) + @Scope(proxyMode = ScopedProxyMode.TARGET_CLASS) public DiscoveryClient discoveryClient() { return DiscoveryManager.getInstance().getDiscoveryClient(); } - + @Bean @ConditionalOnMissingBean - public EurekaHealthIndicator eurekaHealthIndicator(MBeanServer server, EurekaInstanceConfig config) { - return new EurekaHealthIndicator(discoveryClient(), new ServoMetricReader(server), config); + @ConditionalOnBean(MBeanServer.class) + public EurekaHealthIndicator eurekaHealthIndicator(MBeanServer server, + EurekaInstanceConfig config) { + return new EurekaHealthIndicator(discoveryClient(), + new ServoMetricReader(server), config); } - + } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/servo/ServoMetricsAutoConfiguration.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/servo/ServoMetricsAutoConfiguration.java index bd0d0ccc2..d3f82d527 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/servo/ServoMetricsAutoConfiguration.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/servo/ServoMetricsAutoConfiguration.java @@ -35,14 +35,15 @@ import com.netflix.servo.monitor.Monitors; * */ @Configuration -@ConditionalOnClass({Monitors.class,MetricReader.class}) -@ConditionalOnBean({MBeanServer.class,MetricReader.class}) +@ConditionalOnClass({ Monitors.class, MetricReader.class }) +@ConditionalOnBean(MetricReader.class) @AutoConfigureBefore(EndpointAutoConfiguration.class) @AutoConfigureAfter(MetricRepositoryAutoConfiguration.class) public class ServoMetricsAutoConfiguration { - + @Bean @ConditionalOnMissingBean + @ConditionalOnBean(MBeanServer.class) public ServoPublicMetrics servoPublicMetrics(MetricReader reader, MBeanServer server) { return new ServoPublicMetrics(reader, server); }