From ed2ae397aa778509852bec2947d3e5f0ee17748c Mon Sep 17 00:00:00 2001 From: Olga Maciaszek-Sharma Date: Thu, 21 Feb 2019 21:07:59 +0100 Subject: [PATCH] Make spring.cloud.discovery.enabled=false behave the same as spring.cloud.consul.discovery.enabled=false (#496) --- .../main/asciidoc/spring-cloud-consul.adoc | 2 +- .../ConsulDiscoveryClientConfiguration.java | 5 +- ...nsulDiscoveryClientConfigurationTests.java | 79 +++++++++++++++++++ 3 files changed, 84 insertions(+), 2 deletions(-) create mode 100644 spring-cloud-consul-discovery/src/test/java/org/springframework/cloud/consul/discovery/ConsulDiscoveryClientConfigurationTests.java diff --git a/docs/src/main/asciidoc/spring-cloud-consul.adoc b/docs/src/main/asciidoc/spring-cloud-consul.adoc index ca2bf052..c57aa595 100644 --- a/docs/src/main/asciidoc/spring-cloud-consul.adoc +++ b/docs/src/main/asciidoc/spring-cloud-consul.adoc @@ -72,7 +72,7 @@ CAUTION: If you use <>, t The default service name, instance id and port, taken from the `Environment`, are `${spring.application.name}`, the Spring Context ID and `${server.port}` respectively. -To disable the Consul Discovery Client you can set `spring.cloud.consul.discovery.enabled` to `false`. +To disable the Consul Discovery Client you can set `spring.cloud.consul.discovery.enabled` to `false`. Consul Discovery Client will also be disabled when `spring.cloud.discovery.enabled` is set to `false`. To disable the service registration you can set `spring.cloud.consul.discovery.register` to `false`. diff --git a/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/ConsulDiscoveryClientConfiguration.java b/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/ConsulDiscoveryClientConfiguration.java index b2cc8dd7..4290bf28 100644 --- a/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/ConsulDiscoveryClientConfiguration.java +++ b/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/ConsulDiscoveryClientConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright 2013-2015 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. @@ -25,6 +25,7 @@ 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.CommonsClientAutoConfiguration; +import org.springframework.cloud.client.ConditionalOnDiscoveryEnabled; import org.springframework.cloud.client.discovery.simple.SimpleDiscoveryClientAutoConfiguration; import org.springframework.cloud.commons.util.InetUtils; import org.springframework.cloud.consul.ConditionalOnConsulEnabled; @@ -35,10 +36,12 @@ import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; /** * @author Spencer Gibb + * @author Olga Maciaszek-Sharma */ @Configuration @ConditionalOnConsulEnabled @ConditionalOnProperty(value = "spring.cloud.consul.discovery.enabled", matchIfMissing = true) +@ConditionalOnDiscoveryEnabled @EnableConfigurationProperties @AutoConfigureBefore({ SimpleDiscoveryClientAutoConfiguration.class, CommonsClientAutoConfiguration.class }) diff --git a/spring-cloud-consul-discovery/src/test/java/org/springframework/cloud/consul/discovery/ConsulDiscoveryClientConfigurationTests.java b/spring-cloud-consul-discovery/src/test/java/org/springframework/cloud/consul/discovery/ConsulDiscoveryClientConfigurationTests.java new file mode 100644 index 00000000..e574bcae --- /dev/null +++ b/spring-cloud-consul-discovery/src/test/java/org/springframework/cloud/consul/discovery/ConsulDiscoveryClientConfigurationTests.java @@ -0,0 +1,79 @@ +/* + * Copyright 2019-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.consul.discovery; + +import org.junit.After; +import org.junit.Test; + +import org.springframework.beans.factory.NoSuchBeanDefinitionException; +import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration; +import org.springframework.boot.context.properties.source.ConfigurationPropertySources; +import org.springframework.boot.test.util.TestPropertyValues; +import org.springframework.cloud.commons.util.UtilAutoConfiguration; +import org.springframework.cloud.consul.ConsulAutoConfiguration; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; + +import static org.junit.Assert.fail; + +/** + * @author Olga Maciaszek-Sharma + */ +public class ConsulDiscoveryClientConfigurationTests { + + private AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); + + @After + public void after() { + if (this.context != null && this.context.isActive()) { + this.context.close(); + } + } + + @Test + public void consulConfigNotLoadedWhenDiscoveryClientDisabled() { + TestPropertyValues.of("spring.cloud.discovery.enabled=false") + .applyTo(this.context); + setupContext(); + assertBeanNotPresent(ConsulDiscoveryProperties.class); + assertBeanNotPresent(ConsulDiscoveryClient.class); + assertBeanNotPresent(HeartbeatProperties.class); + } + + private void setupContext(Class... config) { + ConfigurationPropertySources.attach(this.context.getEnvironment()); + this.context.register(UtilAutoConfiguration.class, + PropertyPlaceholderAutoConfiguration.class, + ConsulAutoConfiguration.class, + ConsulDiscoveryClientConfiguration.class); + for (Class value : config) { + this.context.register(value); + } + this.context.refresh(); + } + + private void assertBeanNotPresent(Class beanClass) { + try { + context.getBean(beanClass); + fail("Bean of type " + beanClass + " should not have been created."); + } + catch (NoSuchBeanDefinitionException exception) { + // expected exception + } + } + +} \ No newline at end of file