diff --git a/spring-cloud-consul-bus/src/main/java/org/springframework/cloud/consul/bus/ConsulBusAutoConfiguration.java b/spring-cloud-consul-bus/src/main/java/org/springframework/cloud/consul/bus/ConsulBusAutoConfiguration.java index 25ba918d..66272fe3 100644 --- a/spring-cloud-consul-bus/src/main/java/org/springframework/cloud/consul/bus/ConsulBusAutoConfiguration.java +++ b/spring-cloud-consul-bus/src/main/java/org/springframework/cloud/consul/bus/ConsulBusAutoConfiguration.java @@ -19,7 +19,6 @@ package org.springframework.cloud.consul.bus; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.autoconfigure.AutoConfigureAfter; -import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.cloud.bus.BusAutoConfiguration; @@ -33,15 +32,13 @@ import org.springframework.integration.support.json.Jackson2JsonObjectMapper; import org.springframework.messaging.MessageChannel; import org.springframework.scheduling.annotation.EnableScheduling; -import com.ecwid.consul.v1.ConsulClient; import com.fasterxml.jackson.databind.ObjectMapper; /** * @author Spencer Gibb */ @Configuration -@ConditionalOnClass(ConsulClient.class) -@ConditionalOnBean(ConsulClient.class) +@ConditionalOnConsulEnabled @ConditionalOnProperty(value = "spring.cloud.consul.bus.enabled", matchIfMissing = true) @AutoConfigureAfter(BusAutoConfiguration.class) @EnableScheduling diff --git a/spring-cloud-consul-config/src/main/java/org/springframework/cloud/consul/config/ConsulConfigBootstrapConfiguration.java b/spring-cloud-consul-config/src/main/java/org/springframework/cloud/consul/config/ConsulConfigBootstrapConfiguration.java index cd0da6a1..c9075277 100644 --- a/spring-cloud-consul-config/src/main/java/org/springframework/cloud/consul/config/ConsulConfigBootstrapConfiguration.java +++ b/spring-cloud-consul-config/src/main/java/org/springframework/cloud/consul/config/ConsulConfigBootstrapConfiguration.java @@ -20,6 +20,7 @@ import com.ecwid.consul.v1.ConsulClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.cloud.consul.ConditionalOnConsulEnabled; import org.springframework.cloud.consul.ConsulAutoConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -29,21 +30,25 @@ import org.springframework.context.annotation.Import; * @author Spencer Gibb */ @Configuration -@Import(ConsulAutoConfiguration.class) -@EnableConfigurationProperties -@ConditionalOnProperty(name = "spring.cloud.consul.config.enabled", matchIfMissing = true) +@ConditionalOnConsulEnabled public class ConsulConfigBootstrapConfiguration { - @Autowired - private ConsulClient consul; + @Configuration + @EnableConfigurationProperties + @Import(ConsulAutoConfiguration.class) + @ConditionalOnProperty(name = "spring.cloud.consul.config.enabled", matchIfMissing = true) + protected static class ConsulPropertySourceConfiguration { + @Autowired + private ConsulClient consul; - @Bean - public ConsulConfigProperties consulConfigProperties() { - return new ConsulConfigProperties(); - } + @Bean + public ConsulConfigProperties consulConfigProperties() { + return new ConsulConfigProperties(); + } - @Bean - public ConsulPropertySourceLocator consulPropertySourceLocator() { - return new ConsulPropertySourceLocator(consul, consulConfigProperties()); + @Bean + public ConsulPropertySourceLocator consulPropertySourceLocator() { + return new ConsulPropertySourceLocator(consul, consulConfigProperties()); + } } } diff --git a/spring-cloud-consul-core/src/main/java/org/springframework/cloud/consul/ConditionalOnConsulEnabled.java b/spring-cloud-consul-core/src/main/java/org/springframework/cloud/consul/ConditionalOnConsulEnabled.java new file mode 100644 index 00000000..192973ff --- /dev/null +++ b/spring-cloud-consul-core/src/main/java/org/springframework/cloud/consul/ConditionalOnConsulEnabled.java @@ -0,0 +1,47 @@ +/* + * Copyright 2013-2015 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; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import com.ecwid.consul.v1.ConsulClient; +import org.springframework.boot.autoconfigure.condition.AllNestedConditions; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Conditional; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.TYPE, ElementType.METHOD}) +@Conditional(ConditionalOnConsulEnabled.OnConsulEnabledCondition.class) +public @interface ConditionalOnConsulEnabled { + + class OnConsulEnabledCondition extends AllNestedConditions { + + public OnConsulEnabledCondition() { + super(ConfigurationPhase.REGISTER_BEAN); + } + + @ConditionalOnProperty(value = "spring.cloud.consul.enabled", matchIfMissing = true) + static class FoundProperty {} + + @ConditionalOnClass(ConsulClient.class) + static class FoundClass {} + } +} diff --git a/spring-cloud-consul-core/src/main/java/org/springframework/cloud/consul/ConsulAutoConfiguration.java b/spring-cloud-consul-core/src/main/java/org/springframework/cloud/consul/ConsulAutoConfiguration.java index 4f3ba9db..a66fd327 100644 --- a/spring-cloud-consul-core/src/main/java/org/springframework/cloud/consul/ConsulAutoConfiguration.java +++ b/spring-cloud-consul-core/src/main/java/org/springframework/cloud/consul/ConsulAutoConfiguration.java @@ -16,10 +16,11 @@ package org.springframework.cloud.consul; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.actuate.endpoint.Endpoint; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; 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.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -31,7 +32,7 @@ import com.ecwid.consul.v1.ConsulClient; */ @Configuration @EnableConfigurationProperties -@ConditionalOnProperty(name = "spring.cloud.consul.enabled", matchIfMissing = true) +@ConditionalOnConsulEnabled public class ConsulAutoConfiguration { @Bean @@ -49,17 +50,22 @@ public class ConsulAutoConfiguration { @Configuration @ConditionalOnClass(Endpoint.class) + @ConditionalOnBean(ConsulClient.class) protected static class ConsulHealthConfig { + + @Autowired + private ConsulClient consulClient; + @Bean @ConditionalOnMissingBean public ConsulEndpoint consulEndpoint() { - return new ConsulEndpoint(); + return new ConsulEndpoint(consulClient); } @Bean @ConditionalOnMissingBean public ConsulHealthIndicator consulHealthIndicator() { - return new ConsulHealthIndicator(); + return new ConsulHealthIndicator(consulClient); } } } diff --git a/spring-cloud-consul-core/src/main/java/org/springframework/cloud/consul/ConsulEndpoint.java b/spring-cloud-consul-core/src/main/java/org/springframework/cloud/consul/ConsulEndpoint.java index 19418478..7097d566 100644 --- a/spring-cloud-consul-core/src/main/java/org/springframework/cloud/consul/ConsulEndpoint.java +++ b/spring-cloud-consul-core/src/main/java/org/springframework/cloud/consul/ConsulEndpoint.java @@ -22,7 +22,6 @@ import java.util.Map; import lombok.Data; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.actuate.endpoint.AbstractEndpoint; import org.springframework.boot.context.properties.ConfigurationProperties; @@ -39,12 +38,11 @@ import com.ecwid.consul.v1.catalog.model.Node; @ConfigurationProperties(prefix = "endpoints.consul", ignoreUnknownFields = false) public class ConsulEndpoint extends AbstractEndpoint { - @Autowired private ConsulClient consul; - @Autowired - public ConsulEndpoint() { + public ConsulEndpoint(ConsulClient consul) { super("consul", false, true); + this.consul = consul; } @Override diff --git a/spring-cloud-consul-core/src/main/java/org/springframework/cloud/consul/ConsulHealthIndicator.java b/spring-cloud-consul-core/src/main/java/org/springframework/cloud/consul/ConsulHealthIndicator.java index aa490f37..314aac95 100644 --- a/spring-cloud-consul-core/src/main/java/org/springframework/cloud/consul/ConsulHealthIndicator.java +++ b/spring-cloud-consul-core/src/main/java/org/springframework/cloud/consul/ConsulHealthIndicator.java @@ -19,7 +19,6 @@ package org.springframework.cloud.consul; import java.util.List; import java.util.Map; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.actuate.health.AbstractHealthIndicator; import org.springframework.boot.actuate.health.Health; @@ -34,9 +33,12 @@ import com.ecwid.consul.v1.agent.model.Self.Config; */ public class ConsulHealthIndicator extends AbstractHealthIndicator { - @Autowired private ConsulClient consul; + public ConsulHealthIndicator(ConsulClient consul) { + this.consul = consul; + } + @Override protected void doHealthCheck(Health.Builder builder) throws Exception { try { 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 4ed3add2..c215246f 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 @@ -20,6 +20,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.cloud.consul.ConditionalOnConsulEnabled; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -29,6 +30,8 @@ import com.ecwid.consul.v1.ConsulClient; * @author Spencer Gibb */ @Configuration +@ConditionalOnConsulEnabled +@ConditionalOnProperty(value = "spring.cloud.consul.discovery.enabled", matchIfMissing = true) @EnableConfigurationProperties @ConditionalOnBean(ConsulClient.class) public class ConsulDiscoveryClientConfiguration { diff --git a/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/RibbonConsulAutoConfiguration.java b/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/RibbonConsulAutoConfiguration.java index 79427cd8..d43512d4 100644 --- a/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/RibbonConsulAutoConfiguration.java +++ b/spring-cloud-consul-discovery/src/main/java/org/springframework/cloud/consul/discovery/RibbonConsulAutoConfiguration.java @@ -20,6 +20,7 @@ import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.cloud.consul.ConditionalOnConsulEnabled; import org.springframework.cloud.netflix.ribbon.RibbonAutoConfiguration; import org.springframework.cloud.netflix.ribbon.RibbonClients; import org.springframework.cloud.netflix.ribbon.SpringClientFactory; @@ -30,6 +31,7 @@ import org.springframework.context.annotation.Configuration; */ @Configuration @EnableConfigurationProperties +@ConditionalOnConsulEnabled @ConditionalOnBean(SpringClientFactory.class) @ConditionalOnProperty(value = "spring.cloud.consul.ribbon.enabled", matchIfMissing = true) @AutoConfigureAfter(RibbonAutoConfiguration.class)