Make actuator dependency optional in netflix-core

Fixes gh-117
This commit is contained in:
Dave Syer
2014-12-26 14:03:12 +00:00
parent 4a77b86d08
commit 34785b6bdd
10 changed files with 89 additions and 53 deletions

View File

@@ -18,11 +18,11 @@
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<artifactId>spring-boot</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<artifactId>spring-boot-autoconfigure</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>

View File

@@ -19,6 +19,7 @@ import org.apache.commons.configuration.SystemConfiguration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.actuate.endpoint.Endpoint;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -61,9 +62,13 @@ public class ArchaiusAutoConfiguration {
return envConfig;
}
@Bean
protected ArchaiusEndpoint archaiusEndpoint() {
return new ArchaiusEndpoint();
@Configuration
@ConditionalOnClass(Endpoint.class)
protected static class ArchaiusEndpointConfuguration {
@Bean
protected ArchaiusEndpoint archaiusEndpoint() {
return new ArchaiusEndpoint();
}
}
@SuppressWarnings("deprecation")

View File

@@ -15,14 +15,16 @@
*/
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 com.netflix.appinfo.EurekaInstanceConfig;
import com.netflix.appinfo.HealthCheckHandler;
import com.netflix.discovery.shared.EurekaJerseyClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
@@ -41,16 +43,15 @@ import org.springframework.context.annotation.Lazy;
import org.springframework.context.annotation.Scope;
import org.springframework.context.annotation.ScopedProxyMode;
import org.springframework.core.Ordered;
import org.springframework.util.ReflectionUtils;
import com.netflix.appinfo.ApplicationInfoManager;
import com.netflix.appinfo.EurekaInstanceConfig;
import com.netflix.appinfo.HealthCheckHandler;
import com.netflix.appinfo.InstanceInfo.InstanceStatus;
import com.netflix.discovery.DiscoveryManager;
import com.netflix.discovery.EurekaClientConfig;
import org.springframework.util.ReflectionUtils;
import java.lang.reflect.Field;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import com.netflix.discovery.shared.EurekaJerseyClient;
/**
* @author Dave Syer
@@ -201,11 +202,16 @@ public class EurekaDiscoveryClientConfiguration implements SmartLifecycle, Order
};
}
@Bean
@ConditionalOnMissingBean
@Configuration
@ConditionalOnClass(Endpoint.class)
@ConditionalOnBean(MetricReader.class)
public EurekaHealthIndicator eurekaHealthIndicator(EurekaInstanceConfig config,
MetricReader metrics) {
return new EurekaHealthIndicator(eurekaDiscoveryClient(), metrics, config);
protected static class EurekaHealthIndicatorConfiguration {
@Bean
@ConditionalOnMissingBean
public EurekaHealthIndicator eurekaHealthIndicator(
com.netflix.discovery.DiscoveryClient eurekaDiscoveryClient,
MetricReader metrics, EurekaInstanceConfig config) {
return new EurekaHealthIndicator(eurekaDiscoveryClient, metrics, config);
}
}
}

View File

@@ -21,28 +21,33 @@ import com.netflix.loadbalancer.ILoadBalancer;
@ConditionalOnClass(Feign.class)
@AutoConfigureAfter(ArchaiusAutoConfiguration.class)
public class FeignAutoConfiguration {
@Bean
SpringDecoder feignDecoder() {
return new SpringDecoder();
}
@Bean
SpringDecoder feignDecoder() {
return new SpringDecoder();
}
@Bean
SpringEncoder feignEncoder() {
return new SpringEncoder();
}
@Bean
SpringEncoder feignEncoder() {
return new SpringEncoder();
}
@Bean
public Logger feignLogger() {
//return new Slf4jLogger(); //TODO pass Client classname in
return new Logger.JavaLogger();
}
@Bean
public Logger feignLogger() {
// return new Slf4jLogger(); //TODO pass Client classname in
return new Logger.JavaLogger();
}
@Bean
public Contract feignContract() {
return new SpringMvcContract();
}
@Bean
public Contract feignContract() {
return new SpringMvcContract();
}
@Bean
@ConditionalOnClass(ILoadBalancer.class)
public Client feignRibbonClient() { return new FeignRibbonClient(); }
@ConditionalOnClass(ILoadBalancer.class)
@Configuration
protected static class RibbonClientConfiguration {
@Bean
public Client feignRibbonClient() {
return new FeignRibbonClient();
}
}
}

View File

@@ -31,18 +31,14 @@ import com.netflix.hystrix.Hystrix;
* @author Christian Dupuis
*/
@Configuration
@AutoConfigureAfter({HealthIndicatorAutoConfiguration.class})
@ConditionalOnClass({ Hystrix.class, HealthIndicator.class })
@ConditionalOnExpression("${health.hystrix.enabled:true}")
@AutoConfigureAfter({ HealthIndicatorAutoConfiguration.class })
public class HystrixAutoConfiguration {
@Configuration
@ConditionalOnClass({Hystrix.class, HealthIndicator.class})
@ConditionalOnExpression("${health.hystrix.enabled:true}")
public static class HystrixHealthIndicatorConfiguration {
@Bean
public HystrixHealthIndicator hystrixHealthIndicator() {
return new HystrixHealthIndicator();
}
@Bean
public HystrixHealthIndicator hystrixHealthIndicator() {
return new HystrixHealthIndicator();
}
}

View File

@@ -22,7 +22,7 @@ import com.netflix.client.IClient;
* @author Dave Syer
*/
@Configuration
@ConditionalOnClass(IClient.class)
@ConditionalOnClass({IClient.class, RestTemplate.class})
@RibbonClients
@AutoConfigureAfter(EurekaClientAutoConfiguration.class)
public class RibbonAutoConfiguration {

View File

@@ -32,6 +32,10 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>

View File

@@ -56,7 +56,7 @@ public class ApplicationServletPathTests {
assertEquals(HttpStatus.OK, entity.getStatusCode());
String body = entity.getBody();
// System.err.println(body);
assertTrue(body.contains("euerka/js"));
assertTrue(body.contains("eureka/js"));
assertTrue(body.contains("eureka/css"));
// The "DS Replicas"
assertTrue(body.contains("<a href=\"http://localhost:8761/eureka/\">localhost</a>"));

View File

@@ -25,6 +25,18 @@
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-commons</artifactId>
</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>
<groupId>org.springframework.cloud</groupId>
@@ -66,7 +78,11 @@
<groupId>com.netflix.zuul</groupId>
<artifactId>zuul-core</artifactId>
</dependency>
<dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-el</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<!-- Only needed at compile time -->

View File

@@ -38,6 +38,10 @@
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-commons</artifactId>