Commit 34785b6b by Dave Syer

Make actuator dependency optional in netflix-core

Fixes gh-117
parent 4a77b86d
...@@ -18,11 +18,11 @@ ...@@ -18,11 +18,11 @@
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId> <artifactId>spring-boot</artifactId>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId> <artifactId>spring-boot-autoconfigure</artifactId>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework.cloud</groupId> <groupId>org.springframework.cloud</groupId>
......
...@@ -19,6 +19,7 @@ import org.apache.commons.configuration.SystemConfiguration; ...@@ -19,6 +19,7 @@ import org.apache.commons.configuration.SystemConfiguration;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.actuate.endpoint.Endpoint;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
...@@ -61,9 +62,13 @@ public class ArchaiusAutoConfiguration { ...@@ -61,9 +62,13 @@ public class ArchaiusAutoConfiguration {
return envConfig; return envConfig;
} }
@Bean @Configuration
protected ArchaiusEndpoint archaiusEndpoint() { @ConditionalOnClass(Endpoint.class)
return new ArchaiusEndpoint(); protected static class ArchaiusEndpointConfuguration {
@Bean
protected ArchaiusEndpoint archaiusEndpoint() {
return new ArchaiusEndpoint();
}
} }
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
......
...@@ -15,14 +15,16 @@ ...@@ -15,14 +15,16 @@
*/ */
package org.springframework.cloud.netflix.eureka; package org.springframework.cloud.netflix.eureka;
import java.lang.reflect.Field;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import javax.annotation.PreDestroy; import javax.annotation.PreDestroy;
import com.netflix.appinfo.EurekaInstanceConfig;
import com.netflix.appinfo.HealthCheckHandler;
import com.netflix.discovery.shared.EurekaJerseyClient;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.actuate.endpoint.Endpoint;
import org.springframework.boot.actuate.metrics.reader.MetricReader; import org.springframework.boot.actuate.metrics.reader.MetricReader;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
...@@ -41,16 +43,15 @@ import org.springframework.context.annotation.Lazy; ...@@ -41,16 +43,15 @@ import org.springframework.context.annotation.Lazy;
import org.springframework.context.annotation.Scope; import org.springframework.context.annotation.Scope;
import org.springframework.context.annotation.ScopedProxyMode; import org.springframework.context.annotation.ScopedProxyMode;
import org.springframework.core.Ordered; import org.springframework.core.Ordered;
import org.springframework.util.ReflectionUtils;
import com.netflix.appinfo.ApplicationInfoManager; import com.netflix.appinfo.ApplicationInfoManager;
import com.netflix.appinfo.EurekaInstanceConfig;
import com.netflix.appinfo.HealthCheckHandler;
import com.netflix.appinfo.InstanceInfo.InstanceStatus; import com.netflix.appinfo.InstanceInfo.InstanceStatus;
import com.netflix.discovery.DiscoveryManager; import com.netflix.discovery.DiscoveryManager;
import com.netflix.discovery.EurekaClientConfig; import com.netflix.discovery.EurekaClientConfig;
import org.springframework.util.ReflectionUtils; import com.netflix.discovery.shared.EurekaJerseyClient;
import java.lang.reflect.Field;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
/** /**
* @author Dave Syer * @author Dave Syer
...@@ -201,11 +202,16 @@ public class EurekaDiscoveryClientConfiguration implements SmartLifecycle, Order ...@@ -201,11 +202,16 @@ public class EurekaDiscoveryClientConfiguration implements SmartLifecycle, Order
}; };
} }
@Bean @Configuration
@ConditionalOnMissingBean @ConditionalOnClass(Endpoint.class)
@ConditionalOnBean(MetricReader.class) @ConditionalOnBean(MetricReader.class)
public EurekaHealthIndicator eurekaHealthIndicator(EurekaInstanceConfig config, protected static class EurekaHealthIndicatorConfiguration {
MetricReader metrics) { @Bean
return new EurekaHealthIndicator(eurekaDiscoveryClient(), metrics, config); @ConditionalOnMissingBean
public EurekaHealthIndicator eurekaHealthIndicator(
com.netflix.discovery.DiscoveryClient eurekaDiscoveryClient,
MetricReader metrics, EurekaInstanceConfig config) {
return new EurekaHealthIndicator(eurekaDiscoveryClient, metrics, config);
}
} }
} }
...@@ -21,28 +21,33 @@ import com.netflix.loadbalancer.ILoadBalancer; ...@@ -21,28 +21,33 @@ import com.netflix.loadbalancer.ILoadBalancer;
@ConditionalOnClass(Feign.class) @ConditionalOnClass(Feign.class)
@AutoConfigureAfter(ArchaiusAutoConfiguration.class) @AutoConfigureAfter(ArchaiusAutoConfiguration.class)
public class FeignAutoConfiguration { public class FeignAutoConfiguration {
@Bean @Bean
SpringDecoder feignDecoder() { SpringDecoder feignDecoder() {
return new SpringDecoder(); return new SpringDecoder();
} }
@Bean @Bean
SpringEncoder feignEncoder() { SpringEncoder feignEncoder() {
return new SpringEncoder(); return new SpringEncoder();
} }
@Bean @Bean
public Logger feignLogger() { public Logger feignLogger() {
//return new Slf4jLogger(); //TODO pass Client classname in // return new Slf4jLogger(); //TODO pass Client classname in
return new Logger.JavaLogger(); return new Logger.JavaLogger();
} }
@Bean @Bean
public Contract feignContract() { public Contract feignContract() {
return new SpringMvcContract(); return new SpringMvcContract();
} }
@Bean @ConditionalOnClass(ILoadBalancer.class)
@ConditionalOnClass(ILoadBalancer.class) @Configuration
public Client feignRibbonClient() { return new FeignRibbonClient(); } protected static class RibbonClientConfiguration {
@Bean
public Client feignRibbonClient() {
return new FeignRibbonClient();
}
}
} }
...@@ -31,18 +31,14 @@ import com.netflix.hystrix.Hystrix; ...@@ -31,18 +31,14 @@ import com.netflix.hystrix.Hystrix;
* @author Christian Dupuis * @author Christian Dupuis
*/ */
@Configuration @Configuration
@AutoConfigureAfter({HealthIndicatorAutoConfiguration.class}) @ConditionalOnClass({ Hystrix.class, HealthIndicator.class })
@ConditionalOnExpression("${health.hystrix.enabled:true}")
@AutoConfigureAfter({ HealthIndicatorAutoConfiguration.class })
public class HystrixAutoConfiguration { public class HystrixAutoConfiguration {
@Configuration @Bean
@ConditionalOnClass({Hystrix.class, HealthIndicator.class}) public HystrixHealthIndicator hystrixHealthIndicator() {
@ConditionalOnExpression("${health.hystrix.enabled:true}") return new HystrixHealthIndicator();
public static class HystrixHealthIndicatorConfiguration {
@Bean
public HystrixHealthIndicator hystrixHealthIndicator() {
return new HystrixHealthIndicator();
}
} }
} }
...@@ -22,7 +22,7 @@ import com.netflix.client.IClient; ...@@ -22,7 +22,7 @@ import com.netflix.client.IClient;
* @author Dave Syer * @author Dave Syer
*/ */
@Configuration @Configuration
@ConditionalOnClass(IClient.class) @ConditionalOnClass({IClient.class, RestTemplate.class})
@RibbonClients @RibbonClients
@AutoConfigureAfter(EurekaClientAutoConfiguration.class) @AutoConfigureAfter(EurekaClientAutoConfiguration.class)
public class RibbonAutoConfiguration { public class RibbonAutoConfiguration {
......
...@@ -34,6 +34,10 @@ ...@@ -34,6 +34,10 @@
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId> <artifactId>spring-boot-starter-freemarker</artifactId>
<exclusions> <exclusions>
<exclusion> <exclusion>
......
...@@ -56,7 +56,7 @@ public class ApplicationServletPathTests { ...@@ -56,7 +56,7 @@ public class ApplicationServletPathTests {
assertEquals(HttpStatus.OK, entity.getStatusCode()); assertEquals(HttpStatus.OK, entity.getStatusCode());
String body = entity.getBody(); String body = entity.getBody();
// System.err.println(body); // System.err.println(body);
assertTrue(body.contains("euerka/js")); assertTrue(body.contains("eureka/js"));
assertTrue(body.contains("eureka/css")); assertTrue(body.contains("eureka/css"));
// The "DS Replicas" // The "DS Replicas"
assertTrue(body.contains("<a href=\"http://localhost:8761/eureka/\">localhost</a>")); assertTrue(body.contains("<a href=\"http://localhost:8761/eureka/\">localhost</a>"));
......
...@@ -26,6 +26,18 @@ ...@@ -26,6 +26,18 @@
<groupId>org.springframework.cloud</groupId> <groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-commons</artifactId> <artifactId>spring-cloud-commons</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</dependency>
<dependency> <dependency>
<groupId>org.springframework.cloud</groupId> <groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-netflix-core</artifactId> <artifactId>spring-cloud-netflix-core</artifactId>
...@@ -66,7 +78,11 @@ ...@@ -66,7 +78,11 @@
<groupId>com.netflix.zuul</groupId> <groupId>com.netflix.zuul</groupId>
<artifactId>zuul-core</artifactId> <artifactId>zuul-core</artifactId>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-el</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId> <groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId> <artifactId>lombok</artifactId>
<!-- Only needed at compile time --> <!-- Only needed at compile time -->
......
...@@ -39,6 +39,10 @@ ...@@ -39,6 +39,10 @@
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId> <groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-commons</artifactId> <artifactId>spring-cloud-commons</artifactId>
</dependency> </dependency>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment