From 610c6ffb754a8f71cec388ef206eadd302aea799 Mon Sep 17 00:00:00 2001 From: Ryan Baxter Date: Wed, 15 Mar 2023 10:03:38 -0400 Subject: [PATCH] Use spring-config-import in configserver (#1258) Co-authored-by: Ryan Baxter <524254+ryanjbaxter@users.noreply.github.com> --- .../KubernetesClientConfigDataLocationResolver.java | 3 ++- .../cloud/kubernetes/commons/config/ConfigUtils.java | 8 ++++++-- .../src/main/resources/application.yaml | 7 +++++++ .../ConfigDataConfigServerIntegrationTest.java | 3 +-- 4 files changed, 16 insertions(+), 5 deletions(-) diff --git a/spring-cloud-kubernetes-client-config/src/main/java/org/springframework/cloud/kubernetes/client/config/KubernetesClientConfigDataLocationResolver.java b/spring-cloud-kubernetes-client-config/src/main/java/org/springframework/cloud/kubernetes/client/config/KubernetesClientConfigDataLocationResolver.java index ea17def1..19d7f14f 100644 --- a/spring-cloud-kubernetes-client-config/src/main/java/org/springframework/cloud/kubernetes/client/config/KubernetesClientConfigDataLocationResolver.java +++ b/spring-cloud-kubernetes-client-config/src/main/java/org/springframework/cloud/kubernetes/client/config/KubernetesClientConfigDataLocationResolver.java @@ -19,6 +19,7 @@ package org.springframework.cloud.kubernetes.client.config; import io.kubernetes.client.openapi.ApiClient; import io.kubernetes.client.openapi.apis.CoreV1Api; +import org.springframework.boot.BootstrapRegistry; import org.springframework.boot.ConfigurableBootstrapContext; import org.springframework.boot.context.config.ConfigDataLocation; import org.springframework.boot.context.config.ConfigDataLocationResolverContext; @@ -90,7 +91,7 @@ public class KubernetesClientConfigDataLocationResolver extends KubernetesConfig registerSingle(bootstrapContext, ApiClient.class, apiClient, "configDataApiClient"); CoreV1Api coreV1Api = new CoreV1Api(apiClient); - registerSingle(bootstrapContext, CoreV1Api.class, coreV1Api, "configCoreV1Api"); + bootstrapContext.registerIfAbsent(CoreV1Api.class, BootstrapRegistry.InstanceSupplier.of(coreV1Api)); return coreV1Api; } diff --git a/spring-cloud-kubernetes-commons/src/main/java/org/springframework/cloud/kubernetes/commons/config/ConfigUtils.java b/spring-cloud-kubernetes-commons/src/main/java/org/springframework/cloud/kubernetes/commons/config/ConfigUtils.java index 8f0cca6a..60197c39 100644 --- a/spring-cloud-kubernetes-commons/src/main/java/org/springframework/cloud/kubernetes/commons/config/ConfigUtils.java +++ b/spring-cloud-kubernetes-commons/src/main/java/org/springframework/cloud/kubernetes/commons/config/ConfigUtils.java @@ -264,8 +264,12 @@ public final class ConfigUtils { public static void registerSingle(ConfigurableBootstrapContext bootstrapContext, Class cls, T instance, String name) { bootstrapContext.registerIfAbsent(cls, BootstrapRegistry.InstanceSupplier.of(instance)); - bootstrapContext.addCloseListener(event -> event.getApplicationContext().getBeanFactory() - .registerSingleton(name, event.getBootstrapContext().get(cls))); + bootstrapContext.addCloseListener(event -> { + if (event.getApplicationContext().getBeanFactory().getSingleton(name) == null) { + event.getApplicationContext().getBeanFactory().registerSingleton(name, + event.getBootstrapContext().get(cls)); + } + }); } /** diff --git a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/resources/application.yaml b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/resources/application.yaml index aed3a8c7..3449d2b6 100644 --- a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/resources/application.yaml +++ b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/main/resources/application.yaml @@ -4,3 +4,10 @@ spring: server: port: 8888 + +--- +spring: + config: + activate: + on-cloud-platform: kubernetes + import: "optional:kubernetes:" diff --git a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/test/java/org/springframework/cloud/kubernetes/configserver/ConfigDataConfigServerIntegrationTest.java b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/test/java/org/springframework/cloud/kubernetes/configserver/ConfigDataConfigServerIntegrationTest.java index 943b26b1..61d65dfc 100644 --- a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/test/java/org/springframework/cloud/kubernetes/configserver/ConfigDataConfigServerIntegrationTest.java +++ b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/test/java/org/springframework/cloud/kubernetes/configserver/ConfigDataConfigServerIntegrationTest.java @@ -35,8 +35,7 @@ import static org.mockito.Mockito.mockStatic; */ @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, properties = { "spring.main.cloud-platform=KUBERNETES", "spring.cloud.kubernetes.client.namespace=default", - "spring.profiles.include=kubernetes", "spring.cloud.kubernetes.secrets.enableApi=true", "debug=true", - "spring.config.import=kubernetes:" }, + "spring.profiles.include=kubernetes", "spring.cloud.kubernetes.secrets.enableApi=true", "debug=true" }, classes = { KubernetesConfigServerApplication.class }) public class ConfigDataConfigServerIntegrationTest extends ConfigServerIntegrationTest {