From e36b703a8e64d0311720a121b3be440cb9d7a7c4 Mon Sep 17 00:00:00 2001 From: Spencer Gibb Date: Fri, 7 Dec 2018 12:10:31 -0500 Subject: [PATCH] Uses KubernetesDiscoveryClient as return type so ConditionalOnMissingBean will function correctly. Also removes extension from KubernetesDiscoveryProperties See gh-282 --- ...netesDiscoveryClientAutoConfiguration.java | 11 ++-- .../KubernetesDiscoveryProperties.java | 3 +- ...DiscoveryClientAutoConfigurationTests.java | 54 +++++++++++++++++++ 3 files changed, 62 insertions(+), 6 deletions(-) create mode 100644 spring-cloud-kubernetes-discovery/src/test/java/org/springframework/cloud/kubernetes/discovery/KubernetesDiscoveryClientAutoConfigurationTests.java diff --git a/spring-cloud-kubernetes-discovery/src/main/java/org/springframework/cloud/kubernetes/discovery/KubernetesDiscoveryClientAutoConfiguration.java b/spring-cloud-kubernetes-discovery/src/main/java/org/springframework/cloud/kubernetes/discovery/KubernetesDiscoveryClientAutoConfiguration.java index 2a79e363..3b444e27 100644 --- a/spring-cloud-kubernetes-discovery/src/main/java/org/springframework/cloud/kubernetes/discovery/KubernetesDiscoveryClientAutoConfiguration.java +++ b/spring-cloud-kubernetes-discovery/src/main/java/org/springframework/cloud/kubernetes/discovery/KubernetesDiscoveryClientAutoConfiguration.java @@ -18,23 +18,27 @@ package org.springframework.cloud.kubernetes.discovery; import io.fabric8.kubernetes.client.KubernetesClient; + +import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.cloud.client.discovery.DiscoveryClient; +import org.springframework.cloud.client.CommonsClientAutoConfiguration; +import org.springframework.cloud.client.discovery.simple.SimpleDiscoveryClientAutoConfiguration; import org.springframework.cloud.kubernetes.registry.KubernetesRegistration; import org.springframework.cloud.kubernetes.registry.KubernetesServiceRegistry; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Primary; @Configuration @ConditionalOnProperty(name="spring.cloud.kubernetes.enabled", matchIfMissing = true) +@AutoConfigureBefore({ SimpleDiscoveryClientAutoConfiguration.class, + CommonsClientAutoConfiguration.class, }) public class KubernetesDiscoveryClientAutoConfiguration { @Bean @ConditionalOnMissingBean @ConditionalOnProperty(name = "spring.cloud.kubernetes.discovery.enabled",matchIfMissing = true) - public DiscoveryClient discoveryClient(KubernetesClient client, + public KubernetesDiscoveryClient kubernetesDiscoveryClient(KubernetesClient client, KubernetesDiscoveryProperties properties) { return new KubernetesDiscoveryClient(client, properties); } @@ -51,7 +55,6 @@ public class KubernetesDiscoveryClientAutoConfiguration { } @Bean - @Primary public KubernetesDiscoveryProperties getKubernetesDiscoveryProperties() { return new KubernetesDiscoveryProperties(); } diff --git a/spring-cloud-kubernetes-discovery/src/main/java/org/springframework/cloud/kubernetes/discovery/KubernetesDiscoveryProperties.java b/spring-cloud-kubernetes-discovery/src/main/java/org/springframework/cloud/kubernetes/discovery/KubernetesDiscoveryProperties.java index dfd89ae4..bf99106f 100644 --- a/spring-cloud-kubernetes-discovery/src/main/java/org/springframework/cloud/kubernetes/discovery/KubernetesDiscoveryProperties.java +++ b/spring-cloud-kubernetes-discovery/src/main/java/org/springframework/cloud/kubernetes/discovery/KubernetesDiscoveryProperties.java @@ -19,11 +19,10 @@ package org.springframework.cloud.kubernetes.discovery; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationProperties; import org.springframework.core.style.ToStringCreator; @ConfigurationProperties("spring.cloud.kubernetes.discovery") -public class KubernetesDiscoveryProperties extends AutoServiceRegistrationProperties { +public class KubernetesDiscoveryProperties { /** If Kubernetes Discovery is enabled. */ private boolean enabled = true; diff --git a/spring-cloud-kubernetes-discovery/src/test/java/org/springframework/cloud/kubernetes/discovery/KubernetesDiscoveryClientAutoConfigurationTests.java b/spring-cloud-kubernetes-discovery/src/test/java/org/springframework/cloud/kubernetes/discovery/KubernetesDiscoveryClientAutoConfigurationTests.java new file mode 100644 index 00000000..83576e7f --- /dev/null +++ b/spring-cloud-kubernetes-discovery/src/test/java/org/springframework/cloud/kubernetes/discovery/KubernetesDiscoveryClientAutoConfigurationTests.java @@ -0,0 +1,54 @@ +/* + * Copyright 2013-2018 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.kubernetes.discovery; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.SpringBootConfiguration; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; +import org.springframework.cloud.client.discovery.DiscoveryClient; +import org.springframework.cloud.client.discovery.composite.CompositeDiscoveryClient; +import org.springframework.test.context.junit4.SpringRunner; + +import static org.assertj.core.api.Assertions.assertThat; + +@RunWith(SpringRunner.class) +@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) +public class KubernetesDiscoveryClientAutoConfigurationTests { + + @Autowired(required = false) + private DiscoveryClient discoveryClient; + + @Test + public void kubernetesDiscoveryClientCreated() { + assertThat(discoveryClient).isNotNull() + .isInstanceOf(CompositeDiscoveryClient.class); + + CompositeDiscoveryClient composite = (CompositeDiscoveryClient) discoveryClient; + assertThat(composite.getDiscoveryClients().stream() + .anyMatch(dc -> dc instanceof KubernetesDiscoveryClient)).isTrue(); + } + + @SpringBootConfiguration + @EnableAutoConfiguration + protected static class TestConfig {} +}