diff --git a/docs/src/main/asciidoc/spring-cloud-netflix.adoc b/docs/src/main/asciidoc/spring-cloud-netflix.adoc index 6904301fb..14effbc63 100755 --- a/docs/src/main/asciidoc/spring-cloud-netflix.adoc +++ b/docs/src/main/asciidoc/spring-cloud-netflix.adoc @@ -72,7 +72,7 @@ The instance behaviour is driven by `eureka.instance.*` configuration keys, but See {github-code}/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/EurekaInstanceConfigBean.java[EurekaInstanceConfigBean] and {github-code}/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientConfigBean.java[EurekaClientConfigBean] for more details on the configurable options. -To disable the Eureka Discovery Client, you can set `eureka.client.enabled` to `false`. +To disable the Eureka Discovery Client, you can set `eureka.client.enabled` to `false`. Eureka Discovery Client will also be disabled when `spring.cloud.discovery.enabled` is set to `false`. === Authenticating with the Eureka Server diff --git a/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration.java b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration.java index 464c4b7a3..eb240e7ad 100644 --- a/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration.java +++ b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright 2013-2017 the original author or authors. + * Copyright 2013-2019 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -23,6 +23,14 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import java.util.Map; +import com.netflix.appinfo.ApplicationInfoManager; +import com.netflix.appinfo.EurekaInstanceConfig; +import com.netflix.appinfo.HealthCheckHandler; +import com.netflix.appinfo.InstanceInfo; +import com.netflix.discovery.AbstractDiscoveryClientOptionalArgs; +import com.netflix.discovery.EurekaClient; +import com.netflix.discovery.EurekaClientConfig; + import org.springframework.aop.support.AopUtils; import org.springframework.beans.factory.ObjectProvider; import org.springframework.beans.factory.annotation.Autowired; @@ -40,6 +48,7 @@ import org.springframework.boot.autoconfigure.condition.SearchStrategy; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.cloud.autoconfigure.RefreshAutoConfiguration; import org.springframework.cloud.client.CommonsClientAutoConfiguration; +import org.springframework.cloud.client.ConditionalOnDiscoveryEnabled; import org.springframework.cloud.client.actuator.HasFeatures; import org.springframework.cloud.client.discovery.DiscoveryClient; import org.springframework.cloud.client.discovery.noop.NoopDiscoveryClientAutoConfiguration; @@ -64,14 +73,6 @@ import org.springframework.context.annotation.Lazy; import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.util.StringUtils; -import com.netflix.appinfo.ApplicationInfoManager; -import com.netflix.appinfo.EurekaInstanceConfig; -import com.netflix.appinfo.HealthCheckHandler; -import com.netflix.appinfo.InstanceInfo; -import com.netflix.discovery.AbstractDiscoveryClientOptionalArgs; -import com.netflix.discovery.EurekaClient; -import com.netflix.discovery.EurekaClientConfig; - import static org.springframework.cloud.commons.util.IdUtils.getDefaultInstanceId; /** @@ -81,6 +82,7 @@ import static org.springframework.cloud.commons.util.IdUtils.getDefaultInstanceI * @author Matt Jenkins * @author Ryan Baxter * @author Daniel Lavoie + * @author Olga Maciaszek-Sharma */ @Configuration @EnableConfigurationProperties @@ -88,8 +90,9 @@ import static org.springframework.cloud.commons.util.IdUtils.getDefaultInstanceI @Import(DiscoveryClientOptionalArgsConfiguration.class) @ConditionalOnBean(EurekaDiscoveryClientConfiguration.Marker.class) @ConditionalOnProperty(value = "eureka.client.enabled", matchIfMissing = true) -@AutoConfigureBefore({ NoopDiscoveryClientAutoConfiguration.class, - CommonsClientAutoConfiguration.class, ServiceRegistryAutoConfiguration.class }) +@ConditionalOnDiscoveryEnabled +@AutoConfigureBefore({NoopDiscoveryClientAutoConfiguration.class, + CommonsClientAutoConfiguration.class, ServiceRegistryAutoConfiguration.class}) @AutoConfigureAfter(name = {"org.springframework.cloud.autoconfigure.RefreshAutoConfiguration", "org.springframework.cloud.netflix.eureka.EurekaDiscoveryClientConfiguration", "org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationAutoConfiguration"}) @@ -131,18 +134,24 @@ public class EurekaClientAutoConfiguration { @Bean @ConditionalOnMissingBean(value = EurekaInstanceConfig.class, search = SearchStrategy.CURRENT) public EurekaInstanceConfigBean eurekaInstanceConfigBean(InetUtils inetUtils, - ManagementMetadataProvider managementMetadataProvider) { + ManagementMetadataProvider managementMetadataProvider) { String hostname = getProperty("eureka.instance.hostname"); - boolean preferIpAddress = Boolean.parseBoolean(getProperty("eureka.instance.prefer-ip-address")); + boolean preferIpAddress = Boolean + .parseBoolean(getProperty("eureka.instance.prefer-ip-address")); String ipAddress = getProperty("eureka.instance.ip-address"); - boolean isSecurePortEnabled = Boolean.parseBoolean(getProperty("eureka.instance.secure-port-enabled")); + boolean isSecurePortEnabled = Boolean + .parseBoolean(getProperty("eureka.instance.secure-port-enabled")); String serverContextPath = env.getProperty("server.context-path", "/"); - int serverPort = Integer.valueOf(env.getProperty("server.port", env.getProperty("port", "8080"))); + int serverPort = Integer + .valueOf(env.getProperty("server.port", env.getProperty("port", "8080"))); - Integer managementPort = env.getProperty("management.server.port", Integer.class);// nullable. should be wrapped into optional - String managementContextPath = env.getProperty("management.server.servlet.context-path");// nullable. should be wrapped into optional - Integer jmxPort = env.getProperty("com.sun.management.jmxremote.port", Integer.class);//nullable + Integer managementPort = env + .getProperty("management.server.port", Integer.class); // nullable. should be wrapped into optional + String managementContextPath = env + .getProperty("management.server.servlet.context-path"); // nullable. should be wrapped into optional + Integer jmxPort = env + .getProperty("com.sun.management.jmxremote.port", Integer.class); //nullable EurekaInstanceConfigBean instance = new EurekaInstanceConfigBean(inetUtils); instance.setNonSecurePort(serverPort); @@ -153,7 +162,7 @@ public class EurekaClientAutoConfiguration { instance.setIpAddress(ipAddress); } - if(isSecurePortEnabled) { + if (isSecurePortEnabled) { instance.setSecurePort(serverPort); } @@ -173,23 +182,27 @@ public class EurekaClientAutoConfiguration { ManagementMetadata metadata = managementMetadataProvider.get(instance, serverPort, serverContextPath, managementContextPath, managementPort); - if(metadata != null) { + if (metadata != null) { instance.setStatusPageUrl(metadata.getStatusPageUrl()); instance.setHealthCheckUrl(metadata.getHealthCheckUrl()); - if(instance.isSecurePortEnabled()) { + if (instance.isSecurePortEnabled()) { instance.setSecureHealthCheckUrl(metadata.getSecureHealthCheckUrl()); } Map metadataMap = instance.getMetadataMap(); if (metadataMap.get("management.port") == null) { - metadataMap.put("management.port", String.valueOf(metadata.getManagementPort())); + metadataMap.put("management.port", String + .valueOf(metadata.getManagementPort())); } - } else { + } + else { //without the metadata the status and health check URLs will not be set //and the status page and health check url paths will not include the //context path so set them here - if(StringUtils.hasText(managementContextPath)) { - instance.setHealthCheckUrlPath(managementContextPath + instance.getHealthCheckUrlPath()); - instance.setStatusPageUrlPath(managementContextPath + instance.getStatusPageUrlPath()); + if (StringUtils.hasText(managementContextPath)) { + instance.setHealthCheckUrlPath(managementContextPath + instance + .getHealthCheckUrlPath()); + instance.setStatusPageUrlPath(managementContextPath + instance + .getStatusPageUrlPath()); } } @@ -229,10 +242,27 @@ public class EurekaClientAutoConfiguration { @ConditionalOnBean(AutoServiceRegistrationProperties.class) @ConditionalOnProperty(value = "spring.cloud.service-registry.auto-registration.enabled", matchIfMissing = true) public EurekaAutoServiceRegistration eurekaAutoServiceRegistration(ApplicationContext context, EurekaServiceRegistry registry, - EurekaRegistration registration) { + EurekaRegistration registration) { return new EurekaAutoServiceRegistration(context, registry, registration); } + @Target({ElementType.TYPE, ElementType.METHOD}) + @Retention(RetentionPolicy.RUNTIME) + @Documented + @Conditional(OnMissingRefreshScopeCondition.class) + @interface ConditionalOnMissingRefreshScope { + + } + + @Target({ElementType.TYPE, ElementType.METHOD}) + @Retention(RetentionPolicy.RUNTIME) + @Documented + @ConditionalOnClass(RefreshScope.class) + @ConditionalOnBean(RefreshAutoConfiguration.class) + @interface ConditionalOnRefreshScope { + + } + @Configuration @ConditionalOnMissingRefreshScope protected static class EurekaClientConfiguration { @@ -262,9 +292,9 @@ public class EurekaClientAutoConfiguration { @ConditionalOnBean(AutoServiceRegistrationProperties.class) @ConditionalOnProperty(value = "spring.cloud.service-registry.auto-registration.enabled", matchIfMissing = true) public EurekaRegistration eurekaRegistration(EurekaClient eurekaClient, - CloudEurekaInstanceConfig instanceConfig, - ApplicationInfoManager applicationInfoManager, - @Autowired(required = false) ObjectProvider healthCheckHandler) { + CloudEurekaInstanceConfig instanceConfig, + ApplicationInfoManager applicationInfoManager, + @Autowired(required = false) ObjectProvider healthCheckHandler) { return EurekaRegistration.builder(instanceConfig) .with(applicationInfoManager) .with(eurekaClient) @@ -288,15 +318,16 @@ public class EurekaClientAutoConfiguration { @org.springframework.cloud.context.config.annotation.RefreshScope @Lazy public EurekaClient eurekaClient(ApplicationInfoManager manager, EurekaClientConfig config, EurekaInstanceConfig instance, - @Autowired(required = false) HealthCheckHandler healthCheckHandler) { + @Autowired(required = false) HealthCheckHandler healthCheckHandler) { //If we use the proxy of the ApplicationInfoManager we could run into a problem //when shutdown is called on the CloudEurekaClient where the ApplicationInfoManager bean is //requested but wont be allowed because we are shutting down. To avoid this we use the //object directly. ApplicationInfoManager appManager; - if(AopUtils.isAopProxy(manager)) { + if (AopUtils.isAopProxy(manager)) { appManager = ProxyUtils.getTargetObject(manager); - } else { + } + else { appManager = manager; } CloudEurekaClient cloudEurekaClient = new CloudEurekaClient(appManager, config, this.optionalArgs, @@ -319,9 +350,9 @@ public class EurekaClientAutoConfiguration { @ConditionalOnBean(AutoServiceRegistrationProperties.class) @ConditionalOnProperty(value = "spring.cloud.service-registry.auto-registration.enabled", matchIfMissing = true) public EurekaRegistration eurekaRegistration(EurekaClient eurekaClient, - CloudEurekaInstanceConfig instanceConfig, - ApplicationInfoManager applicationInfoManager, - @Autowired(required = false) ObjectProvider healthCheckHandler) { + CloudEurekaInstanceConfig instanceConfig, + ApplicationInfoManager applicationInfoManager, + @Autowired(required = false) ObjectProvider healthCheckHandler) { return EurekaRegistration.builder(instanceConfig) .with(applicationInfoManager) .with(eurekaClient) @@ -331,23 +362,6 @@ public class EurekaClientAutoConfiguration { } - @Target({ ElementType.TYPE, ElementType.METHOD }) - @Retention(RetentionPolicy.RUNTIME) - @Documented - @Conditional(OnMissingRefreshScopeCondition.class) - @interface ConditionalOnMissingRefreshScope { - - } - - @Target({ ElementType.TYPE, ElementType.METHOD }) - @Retention(RetentionPolicy.RUNTIME) - @Documented - @ConditionalOnClass(RefreshScope.class) - @ConditionalOnBean(RefreshAutoConfiguration.class) - @interface ConditionalOnRefreshScope { - - } - private static class OnMissingRefreshScopeCondition extends AnyNestedCondition { public OnMissingRefreshScopeCondition() { @@ -371,7 +385,7 @@ public class EurekaClientAutoConfiguration { @ConditionalOnMissingBean @ConditionalOnEnabledHealthIndicator("eureka") public EurekaHealthIndicator eurekaHealthIndicator(EurekaClient eurekaClient, - EurekaInstanceConfig instanceConfig, EurekaClientConfig clientConfig) { + EurekaInstanceConfig instanceConfig, EurekaClientConfig clientConfig) { return new EurekaHealthIndicator(eurekaClient, instanceConfig, clientConfig); } } diff --git a/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/EurekaDiscoveryClientConfiguration.java b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/EurekaDiscoveryClientConfiguration.java index 07a8edd30..b53b1fbce 100644 --- a/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/EurekaDiscoveryClientConfiguration.java +++ b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/EurekaDiscoveryClientConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright 2013-2017 the original author or authors. + * Copyright 2013-2019 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -12,11 +12,14 @@ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. - * */ package org.springframework.cloud.netflix.eureka; +import com.netflix.appinfo.HealthCheckHandler; +import com.netflix.discovery.EurekaClient; +import com.netflix.discovery.EurekaClientConfig; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.actuate.health.HealthAggregator; import org.springframework.boot.actuate.health.OrderedHealthAggregator; @@ -24,30 +27,27 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.cloud.client.ConditionalOnDiscoveryEnabled; import org.springframework.cloud.context.scope.refresh.RefreshScopeRefreshedEvent; import org.springframework.cloud.netflix.eureka.serviceregistry.EurekaAutoServiceRegistration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.event.EventListener; -import com.netflix.appinfo.HealthCheckHandler; -import com.netflix.discovery.EurekaClient; -import com.netflix.discovery.EurekaClientConfig; - /** * @author Dave Syer * @author Spencer Gibb * @author Jon Schneider * @author Jakub Narloch + * @author Olga Maciaszek-Sharma */ @Configuration @EnableConfigurationProperties @ConditionalOnClass(EurekaClientConfig.class) @ConditionalOnProperty(value = "eureka.client.enabled", matchIfMissing = true) +@ConditionalOnDiscoveryEnabled public class EurekaDiscoveryClientConfiguration { - class Marker {} - @Bean public Marker eurekaDiscoverClientMarker() { return new Marker(); @@ -67,7 +67,7 @@ public class EurekaDiscoveryClientConfiguration { public void onApplicationEvent(RefreshScopeRefreshedEvent event) { //This will force the creation of the EurkaClient bean if not already created //to make sure the client will be reregistered after a refresh event - if(eurekaClient != null) { + if (eurekaClient != null) { eurekaClient.getApplications(); } if (autoRegistration != null) { @@ -78,7 +78,6 @@ public class EurekaDiscoveryClientConfiguration { } } - @Configuration @ConditionalOnProperty(value = "eureka.client.healthcheck.enabled", matchIfMissing = false) protected static class EurekaHealthCheckHandlerConfiguration { @@ -92,4 +91,6 @@ public class EurekaDiscoveryClientConfiguration { return new EurekaHealthCheckHandler(this.healthAggregator); } } + + class Marker { } } diff --git a/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/ribbon/eureka/ConditionalOnRibbonAndEurekaEnabled.java b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/ribbon/eureka/ConditionalOnRibbonAndEurekaEnabled.java index 5df8b539a..a9faff226 100644 --- a/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/ribbon/eureka/ConditionalOnRibbonAndEurekaEnabled.java +++ b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/ribbon/eureka/ConditionalOnRibbonAndEurekaEnabled.java @@ -1,3 +1,19 @@ +/* + * Copyright 2013-2019 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package org.springframework.cloud.netflix.ribbon.eureka; import java.lang.annotation.Documented; @@ -6,37 +22,45 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; +import com.netflix.discovery.EurekaClient; +import com.netflix.niws.loadbalancer.DiscoveryEnabledNIWSServerList; + import org.springframework.boot.autoconfigure.condition.AllNestedConditions; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.cloud.client.ConditionalOnDiscoveryEnabled; import org.springframework.cloud.netflix.ribbon.SpringClientFactory; import org.springframework.context.annotation.Conditional; -import com.netflix.discovery.EurekaClient; -import com.netflix.niws.loadbalancer.DiscoveryEnabledNIWSServerList; - +/** + * Conditional that requires both Ribbon and Eureka to be enabled. + * @author Ihor Kryvenko + * @author Spencer Gibb + * @author Olga Maciaszek-Sharma + */ @Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented @Conditional(ConditionalOnRibbonAndEurekaEnabled.OnRibbonAndEurekaEnabledCondition.class) public @interface ConditionalOnRibbonAndEurekaEnabled { - class OnRibbonAndEurekaEnabledCondition extends AllNestedConditions { + class OnRibbonAndEurekaEnabledCondition extends AllNestedConditions { - public OnRibbonAndEurekaEnabledCondition() { - super(ConfigurationPhase.REGISTER_BEAN); - } + public OnRibbonAndEurekaEnabledCondition() { + super(ConfigurationPhase.REGISTER_BEAN); + } - @ConditionalOnClass(DiscoveryEnabledNIWSServerList.class) - @ConditionalOnBean(SpringClientFactory.class) - @ConditionalOnProperty(value = "ribbon.eureka.enabled", matchIfMissing = true) - static class Defaults {} + @ConditionalOnClass(DiscoveryEnabledNIWSServerList.class) + @ConditionalOnBean(SpringClientFactory.class) + @ConditionalOnProperty(value = "ribbon.eureka.enabled", matchIfMissing = true) + static class Defaults { } - @ConditionalOnBean(EurekaClient.class) - static class EurekaBeans {} + @ConditionalOnBean(EurekaClient.class) + static class EurekaBeans { } - @ConditionalOnProperty(value = "eureka.client.enabled", matchIfMissing = true) - static class OnEurekaClientEnabled {} - } + @ConditionalOnProperty(value = "eureka.client.enabled", matchIfMissing = true) + @ConditionalOnDiscoveryEnabled + static class OnEurekaClientEnabled { } + } } diff --git a/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfigurationTests.java b/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfigurationTests.java index eb3a57db9..90bb15ad1 100644 --- a/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfigurationTests.java +++ b/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfigurationTests.java @@ -20,10 +20,20 @@ import java.util.HashMap; import java.util.Map; import java.util.concurrent.CountDownLatch; import java.util.concurrent.atomic.AtomicBoolean; + +import com.netflix.appinfo.ApplicationInfoManager; +import com.netflix.appinfo.HealthCheckHandler; +import com.netflix.discovery.DiscoveryClient; +import com.netflix.discovery.EurekaClient; +import com.netflix.discovery.EurekaClientConfig; +import com.netflix.discovery.shared.transport.jersey.EurekaJerseyClient; +import com.sun.jersey.client.apache4.ApacheHttpClient4; import org.junit.After; import org.junit.Test; import org.mockito.Mockito; + import org.springframework.aop.framework.Advised; +import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.SearchStrategy; import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration; @@ -35,6 +45,7 @@ import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationP import org.springframework.cloud.commons.util.UtilAutoConfiguration; import org.springframework.cloud.context.refresh.ContextRefresher; import org.springframework.cloud.context.scope.GenericScope; +import org.springframework.cloud.netflix.eureka.serviceregistry.EurekaServiceRegistry; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.Bean; @@ -44,21 +55,17 @@ import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.core.env.MutablePropertySources; import org.springframework.core.env.SystemEnvironmentPropertySource; import org.springframework.test.util.ReflectionTestUtils; -import com.netflix.appinfo.ApplicationInfoManager; -import com.netflix.appinfo.HealthCheckHandler; -import com.netflix.discovery.EurekaClient; -import com.netflix.discovery.EurekaClientConfig; -import com.netflix.discovery.shared.transport.jersey.EurekaJerseyClient; -import com.sun.jersey.client.apache4.ApacheHttpClient4; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; import static org.springframework.boot.test.util.EnvironmentTestUtils.addEnvironment; /** * @author Spencer Gibb * @author Matt Jenkins + * @author Olga Maciaszek-Sharma */ public class EurekaClientAutoConfigurationTests { private AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); @@ -521,6 +528,28 @@ public class EurekaClientAutoConfigurationTests { } } + @Test + public void eurekaConfigNotLoadedWhenDiscoveryClientDisabled() { + addEnvironment(context, "spring.cloud.discovery.enabled=false"); + setupContext(TestConfiguration.class); + assertBeanNotPresent(EurekaClientConfigBean.class); + assertBeanNotPresent(EurekaInstanceConfigBean.class); + assertBeanNotPresent(DiscoveryClient.class); + assertBeanNotPresent(EurekaServiceRegistry.class); + assertBeanNotPresent(EurekaClient.class); + assertBeanNotPresent(EurekaDiscoveryClientConfiguration.Marker.class); + } + + private void assertBeanNotPresent(Class beanClass) { + try { + context.getBean(beanClass); + fail("Bean of type " + beanClass + " should not have been created."); + } + catch (NoSuchBeanDefinitionException exception) { + // expected exception + } + } + private void testNonSecurePortSystemProp(String propName) { addSystemEnvironment(this.context.getEnvironment(), propName + ":8888"); setupContext();