From 25a3655b194d6bdb4d114824beee7e0117ac3ecc Mon Sep 17 00:00:00 2001 From: Ryan Baxter Date: Tue, 14 Nov 2023 14:39:36 -0500 Subject: [PATCH] Use config server uri from boostrap context if discovery is enabled. Fixes #2338 (#2343) Co-authored-by: Ryan Baxter <524254+ryanjbaxter@users.noreply.github.com> --- .../client/ConfigServerConfigDataLoader.java | 36 +++++++++++++++---- .../ConfigServerConfigDataLoaderTests.java | 22 ++++++++++++ 2 files changed, 52 insertions(+), 6 deletions(-) diff --git a/spring-cloud-config-client/src/main/java/org/springframework/cloud/config/client/ConfigServerConfigDataLoader.java b/spring-cloud-config-client/src/main/java/org/springframework/cloud/config/client/ConfigServerConfigDataLoader.java index ced0f6ef..7a4eda8a 100644 --- a/spring-cloud-config-client/src/main/java/org/springframework/cloud/config/client/ConfigServerConfigDataLoader.java +++ b/spring-cloud-config-client/src/main/java/org/springframework/cloud/config/client/ConfigServerConfigDataLoader.java @@ -265,8 +265,23 @@ public class ConfigServerConfigDataLoader implements ConfigDataLoader 1) { + String[] uris; + boolean discoveryEnabled = properties.getDiscovery().isEnabled(); + ConfigClientProperties bootstrapConfigClientProperties = context.getBootstrapContext() + .get(ConfigClientProperties.class); + // In the case where discovery is enabled we need to extract the config server + // uris, username, and password + // from the properties from the context. These are set in + // ConfigServerInstanceMonitor.refresh which will only + // be called the first time we fetch configuration. + if (discoveryEnabled) { + uris = bootstrapConfigClientProperties.getUri(); + } + else { + uris = properties.getUri(); + } + int noOfUrls = uris.length; + if (uris.length > 1) { logger.info("Multiple Config Server Urls found listed."); } @@ -284,10 +299,19 @@ public class ConfigServerConfigDataLoader implements ConfigDataLoader logger); + ClientHttpRequestFactory requestFactory = mock(ClientHttpRequestFactory.class); + RestTemplate restTemplate = new RestTemplate(requestFactory); + when(bootstrapContext.get(RestTemplate.class)).thenReturn(restTemplate); + ConfigClientProperties bootstrapConfigClientProperties = new ConfigClientProperties(); + bootstrapConfigClientProperties.setDiscovery(discovery); + bootstrapConfigClientProperties.setUri(new String[] { "http://configservice:8888" }); + when(bootstrapContext.get(ConfigClientProperties.class)).thenReturn(bootstrapConfigClientProperties); + + mockRequestResponse(requestFactory, "http://configservice:8888", HttpStatus.OK); + + assertThat(this.loader.load(context, resource)).isNotNull(); + } + @Disabled @Test // TODO Enable once we have