From 2115127eb5b5c67971bd5a7045f6690b81936216 Mon Sep 17 00:00:00 2001 From: Spencer Gibb Date: Fri, 10 Feb 2017 11:02:17 -0700 Subject: [PATCH] Make sure all auto-config respect general zookeeper disabled property All auto-configuration needs to respect `spring.cloud.zookeeper.enabled=false`. fixes gh-89 --- .../ZookeeperConfigAutoConfiguration.java | 2 + ...ZookeeperConfigBootstrapConfiguration.java | 4 +- .../RibbonZookeeperAutoConfiguration.java | 2 + ...ependencyFeignClientAutoConfiguration.java | 2 + ...pendencyRestTemplateAutoConfiguration.java | 6 +- .../DependencyRibbonAutoConfiguration.java | 6 +- ...ookeeperDependenciesAutoConfiguration.java | 2 + .../DependencyWatcherAutoConfiguration.java | 2 + .../sample/ZookeeperDisabledTests.java | 98 +++++++++++++++++++ 9 files changed, 118 insertions(+), 6 deletions(-) create mode 100644 spring-cloud-zookeeper-sample/src/test/java/org/springframework/cloud/zookeeper/sample/ZookeeperDisabledTests.java diff --git a/spring-cloud-zookeeper-config/src/main/java/org/springframework/cloud/zookeeper/config/ZookeeperConfigAutoConfiguration.java b/spring-cloud-zookeeper-config/src/main/java/org/springframework/cloud/zookeeper/config/ZookeeperConfigAutoConfiguration.java index 3cd827ad..6646aa01 100644 --- a/spring-cloud-zookeeper-config/src/main/java/org/springframework/cloud/zookeeper/config/ZookeeperConfigAutoConfiguration.java +++ b/spring-cloud-zookeeper-config/src/main/java/org/springframework/cloud/zookeeper/config/ZookeeperConfigAutoConfiguration.java @@ -20,6 +20,7 @@ import org.apache.curator.framework.CuratorFramework; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.cloud.endpoint.RefreshEndpoint; +import org.springframework.cloud.zookeeper.ConditionalOnZookeeperEnabled; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -31,6 +32,7 @@ import org.springframework.context.annotation.Configuration; * @since 1.0.0 */ @Configuration +@ConditionalOnZookeeperEnabled public class ZookeeperConfigAutoConfiguration { @Configuration diff --git a/spring-cloud-zookeeper-config/src/main/java/org/springframework/cloud/zookeeper/config/ZookeeperConfigBootstrapConfiguration.java b/spring-cloud-zookeeper-config/src/main/java/org/springframework/cloud/zookeeper/config/ZookeeperConfigBootstrapConfiguration.java index b617e8d0..298d4df5 100644 --- a/spring-cloud-zookeeper-config/src/main/java/org/springframework/cloud/zookeeper/config/ZookeeperConfigBootstrapConfiguration.java +++ b/spring-cloud-zookeeper-config/src/main/java/org/springframework/cloud/zookeeper/config/ZookeeperConfigBootstrapConfiguration.java @@ -18,7 +18,7 @@ package org.springframework.cloud.zookeeper.config; import org.apache.curator.framework.CuratorFramework; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.cloud.zookeeper.ConditionalOnZookeeperEnabled; import org.springframework.cloud.zookeeper.ZookeeperAutoConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -31,7 +31,7 @@ import org.springframework.context.annotation.Import; * @since 1.0.0 */ @Configuration -@ConditionalOnProperty(value = "spring.cloud.zookeeper.enabled", matchIfMissing = true) +@ConditionalOnZookeeperEnabled @Import(ZookeeperAutoConfiguration.class) public class ZookeeperConfigBootstrapConfiguration { diff --git a/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/RibbonZookeeperAutoConfiguration.java b/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/RibbonZookeeperAutoConfiguration.java index 695aeff8..187cfa79 100644 --- a/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/RibbonZookeeperAutoConfiguration.java +++ b/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/RibbonZookeeperAutoConfiguration.java @@ -22,6 +22,7 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties import org.springframework.cloud.netflix.ribbon.RibbonAutoConfiguration; import org.springframework.cloud.netflix.ribbon.RibbonClients; import org.springframework.cloud.netflix.ribbon.SpringClientFactory; +import org.springframework.cloud.zookeeper.ConditionalOnZookeeperEnabled; import org.springframework.context.annotation.Configuration; /** @@ -33,6 +34,7 @@ import org.springframework.context.annotation.Configuration; */ @Configuration @EnableConfigurationProperties +@ConditionalOnZookeeperEnabled @ConditionalOnBean(SpringClientFactory.class) @ConditionalOnRibbonZookeeper @AutoConfigureAfter(RibbonAutoConfiguration.class) diff --git a/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/dependency/DependencyFeignClientAutoConfiguration.java b/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/dependency/DependencyFeignClientAutoConfiguration.java index b012985e..1e032c13 100644 --- a/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/dependency/DependencyFeignClientAutoConfiguration.java +++ b/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/dependency/DependencyFeignClientAutoConfiguration.java @@ -32,6 +32,7 @@ import org.springframework.cloud.netflix.feign.ribbon.FeignRibbonClientAutoConfi import org.springframework.cloud.netflix.feign.ribbon.LoadBalancerFeignClient; import org.springframework.cloud.netflix.ribbon.RibbonAutoConfiguration; import org.springframework.cloud.netflix.ribbon.SpringClientFactory; +import org.springframework.cloud.zookeeper.ConditionalOnZookeeperEnabled; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; @@ -49,6 +50,7 @@ import feign.Response; */ @Configuration @ConditionalOnDependenciesPassed +@ConditionalOnZookeeperEnabled @ConditionalOnProperty(value = "spring.cloud.zookeeper.dependency.headers.enabled", matchIfMissing = true) @ConditionalOnClass({ Client.class, LoadBalancerFeignClient.class }) @AutoConfigureAfter({ RibbonAutoConfiguration.class, FeignRibbonClientAutoConfiguration.class }) diff --git a/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/dependency/DependencyRestTemplateAutoConfiguration.java b/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/dependency/DependencyRestTemplateAutoConfiguration.java index 935ad325..086e8fbd 100644 --- a/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/dependency/DependencyRestTemplateAutoConfiguration.java +++ b/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/dependency/DependencyRestTemplateAutoConfiguration.java @@ -27,6 +27,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.cloud.client.loadbalancer.LoadBalanced; +import org.springframework.cloud.zookeeper.ConditionalOnZookeeperEnabled; import org.springframework.cloud.zookeeper.discovery.ConditionalOnRibbonZookeeper; import org.springframework.context.annotation.Configuration; import org.springframework.http.HttpHeaders; @@ -42,11 +43,12 @@ import org.springframework.web.client.RestTemplate; * @author Marcin Grzejszczak * @since 1.0.0 */ -@AutoConfigureAfter(DependencyRibbonAutoConfiguration.class) -@ConditionalOnRibbonZookeeper @Configuration +@ConditionalOnZookeeperEnabled +@ConditionalOnRibbonZookeeper @ConditionalOnDependenciesPassed @ConditionalOnProperty(value = "spring.cloud.zookeeper.dependency.resttemplate.enabled", matchIfMissing = true) +@AutoConfigureAfter(DependencyRibbonAutoConfiguration.class) public class DependencyRestTemplateAutoConfiguration { @Autowired @LoadBalanced RestTemplate restTemplate; diff --git a/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/dependency/DependencyRibbonAutoConfiguration.java b/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/dependency/DependencyRibbonAutoConfiguration.java index d934f583..3ee63a3b 100644 --- a/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/dependency/DependencyRibbonAutoConfiguration.java +++ b/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/dependency/DependencyRibbonAutoConfiguration.java @@ -29,6 +29,7 @@ import org.springframework.cloud.client.loadbalancer.LoadBalancerClient; import org.springframework.cloud.netflix.ribbon.RibbonAutoConfiguration; import org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient; import org.springframework.cloud.netflix.ribbon.SpringClientFactory; +import org.springframework.cloud.zookeeper.ConditionalOnZookeeperEnabled; import org.springframework.cloud.zookeeper.discovery.ConditionalOnRibbonZookeeper; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; @@ -42,10 +43,11 @@ import org.springframework.context.annotation.Configuration; * @author Marcin Grzejszczak * @since 1.0.0 */ -@AutoConfigureBefore(RibbonAutoConfiguration.class) -@ConditionalOnRibbonZookeeper @Configuration +@ConditionalOnZookeeperEnabled +@ConditionalOnRibbonZookeeper @ConditionalOnDependenciesPassed +@AutoConfigureBefore(RibbonAutoConfiguration.class) public class DependencyRibbonAutoConfiguration { private static final Log log = LogFactory.getLog(DependencyRibbonAutoConfiguration.class); diff --git a/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/dependency/ZookeeperDependenciesAutoConfiguration.java b/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/dependency/ZookeeperDependenciesAutoConfiguration.java index 0ed81b8c..026ab00e 100644 --- a/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/dependency/ZookeeperDependenciesAutoConfiguration.java +++ b/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/dependency/ZookeeperDependenciesAutoConfiguration.java @@ -18,6 +18,7 @@ package org.springframework.cloud.zookeeper.discovery.dependency; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.cloud.zookeeper.ConditionalOnZookeeperEnabled; import org.springframework.cloud.zookeeper.ZookeeperAutoConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -30,6 +31,7 @@ import org.springframework.context.annotation.Configuration; */ @Configuration @EnableConfigurationProperties +@ConditionalOnZookeeperEnabled @ConditionalOnDependenciesPassed @AutoConfigureAfter(ZookeeperAutoConfiguration.class) public class ZookeeperDependenciesAutoConfiguration { diff --git a/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/watcher/DependencyWatcherAutoConfiguration.java b/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/watcher/DependencyWatcherAutoConfiguration.java index 2e6e75c9..32147336 100644 --- a/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/watcher/DependencyWatcherAutoConfiguration.java +++ b/spring-cloud-zookeeper-discovery/src/main/java/org/springframework/cloud/zookeeper/discovery/watcher/DependencyWatcherAutoConfiguration.java @@ -24,6 +24,7 @@ import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.cloud.zookeeper.ConditionalOnZookeeperEnabled; import org.springframework.cloud.zookeeper.discovery.ZookeeperInstance; import org.springframework.cloud.zookeeper.discovery.ZookeeperServiceDiscovery; import org.springframework.cloud.zookeeper.discovery.dependency.ConditionalOnDependenciesPassed; @@ -45,6 +46,7 @@ import org.springframework.context.annotation.Configuration; */ @Configuration @EnableConfigurationProperties +@ConditionalOnZookeeperEnabled @ConditionalOnDependenciesPassed @AutoConfigureAfter(ZookeeperDependenciesAutoConfiguration.class) public class DependencyWatcherAutoConfiguration { diff --git a/spring-cloud-zookeeper-sample/src/test/java/org/springframework/cloud/zookeeper/sample/ZookeeperDisabledTests.java b/spring-cloud-zookeeper-sample/src/test/java/org/springframework/cloud/zookeeper/sample/ZookeeperDisabledTests.java new file mode 100644 index 00000000..a81c80c3 --- /dev/null +++ b/spring-cloud-zookeeper-sample/src/test/java/org/springframework/cloud/zookeeper/sample/ZookeeperDisabledTests.java @@ -0,0 +1,98 @@ +/* + * Copyright 2013-2017 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.zookeeper.sample; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.cloud.zookeeper.ZookeeperAutoConfiguration; +import org.springframework.cloud.zookeeper.config.ZookeeperConfigAutoConfiguration; +import org.springframework.cloud.zookeeper.discovery.RibbonZookeeperAutoConfiguration; +import org.springframework.cloud.zookeeper.discovery.ZookeeperDiscoveryAutoConfiguration; +import org.springframework.cloud.zookeeper.discovery.dependency.DependencyFeignClientAutoConfiguration; +import org.springframework.cloud.zookeeper.discovery.dependency.DependencyRestTemplateAutoConfiguration; +import org.springframework.cloud.zookeeper.discovery.dependency.DependencyRibbonAutoConfiguration; +import org.springframework.cloud.zookeeper.discovery.dependency.ZookeeperDependenciesAutoConfiguration; +import org.springframework.cloud.zookeeper.discovery.watcher.DependencyWatcherAutoConfiguration; +import org.springframework.cloud.zookeeper.serviceregistry.ZookeeperAutoServiceRegistrationAutoConfiguration; +import org.springframework.cloud.zookeeper.serviceregistry.ZookeeperServiceRegistryAutoConfiguration; +import org.springframework.cloud.zookeeper.support.CuratorServiceDiscoveryAutoConfiguration; +import org.springframework.test.context.junit4.SpringRunner; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT; + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = SampleZookeeperApplication.class, webEnvironment = RANDOM_PORT, + properties = "spring.cloud.zookeeper.enabled=false") +public class ZookeeperDisabledTests { + + @Autowired(required = false) + private ZookeeperAutoConfiguration zookeeperAutoConfiguration; + + @Autowired(required = false) + private ZookeeperConfigAutoConfiguration zookeeperConfigAutoConfiguration; + + @Autowired(required = false) + private RibbonZookeeperAutoConfiguration ribbonZookeeperAutoConfiguration; + + @Autowired(required = false) + private ZookeeperDiscoveryAutoConfiguration zookeeperDiscoveryAutoConfiguration; + + @Autowired(required = false) + private DependencyFeignClientAutoConfiguration dependencyFeignClientAutoConfiguration; + + @Autowired(required = false) + private DependencyRibbonAutoConfiguration dependencyRibbonAutoConfiguration; + + @Autowired(required = false) + private DependencyRestTemplateAutoConfiguration dependencyRestTemplateAutoConfiguration; + + @Autowired(required = false) + private ZookeeperDependenciesAutoConfiguration zookeeperDependenciesAutoConfiguration; + + @Autowired(required = false) + private DependencyWatcherAutoConfiguration dependencyWatcherAutoConfiguration; + + @Autowired(required = false) + private ZookeeperAutoServiceRegistrationAutoConfiguration zookeeperAutoServiceRegistrationAutoConfiguration; + + @Autowired(required = false) + private ZookeeperServiceRegistryAutoConfiguration zookeeperServiceRegistryAutoConfiguration; + + @Autowired(required = false) + private CuratorServiceDiscoveryAutoConfiguration curatorServiceDiscoveryAutoConfiguration; + + + @Test + public void allPartsOfZookeeperDisabled() throws Exception { + assertThat(this.zookeeperAutoConfiguration).as("ZookeeperAutoConfiguration was not disabled").isNull(); + assertThat(this.zookeeperConfigAutoConfiguration).as("ZookeeperConfigAutoConfiguration was not disabled").isNull(); + assertThat(this.ribbonZookeeperAutoConfiguration).as("RibbonZookeeperAutoConfiguration was not disabled").isNull(); + assertThat(this.zookeeperDiscoveryAutoConfiguration).as("ZookeeperDiscoveryAutoConfiguration was not disabled").isNull(); + assertThat(this.dependencyFeignClientAutoConfiguration).as("DependencyFeignClientAutoConfiguration was not disabled").isNull(); + assertThat(this.dependencyRibbonAutoConfiguration).as("DependencyRibbonAutoConfiguration was not disabled").isNull(); + assertThat(this.dependencyRestTemplateAutoConfiguration).as("DependencyRestTemplateAutoConfiguration was not disabled").isNull(); + assertThat(this.zookeeperDependenciesAutoConfiguration).as("ZookeeperDependenciesAutoConfiguration was not disabled").isNull(); + assertThat(this.dependencyWatcherAutoConfiguration).as("DependencyWatcherAutoConfiguration was not disabled").isNull(); + assertThat(this.zookeeperAutoServiceRegistrationAutoConfiguration).as("ZookeeperAutoServiceRegistrationAutoConfiguration was not disabled").isNull(); + assertThat(this.zookeeperServiceRegistryAutoConfiguration).as("ZookeeperServiceRegistryAutoConfiguration was not disabled").isNull(); + assertThat(this.curatorServiceDiscoveryAutoConfiguration).as("CuratorServiceDiscoveryAutoConfiguration was not disabled").isNull(); + + } +}