Use spring-config-import in configserver (#1258)

Co-authored-by: Ryan Baxter <524254+ryanjbaxter@users.noreply.github.com>
This commit is contained in:
Ryan Baxter
2023-03-15 10:03:38 -04:00
committed by GitHub
parent 8cb2d49058
commit 610c6ffb75
4 changed files with 16 additions and 5 deletions

View File

@@ -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;
}

View File

@@ -264,8 +264,12 @@ public final class ConfigUtils {
public static <T> void registerSingle(ConfigurableBootstrapContext bootstrapContext, Class<T> 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));
}
});
}
/**

View File

@@ -4,3 +4,10 @@ spring:
server:
port: 8888
---
spring:
config:
activate:
on-cloud-platform: kubernetes
import: "optional:kubernetes:"

View File

@@ -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 {