From ccb32d23fc36e723135d2ce59de6e86de5a76776 Mon Sep 17 00:00:00 2001 From: spencergibb Date: Wed, 23 Dec 2020 12:49:42 -0500 Subject: [PATCH] Only use spring.cloud.config.profiles if not 'default'. In ConfigData, the Profiles object takes care of resolving the default profile. So only prefer spring.cloud.config.profiles if it has been set to something other than 'default'. Fixes gh-1777 --- .../config/client/ConfigClientProperties.java | 7 ++++++- .../client/ConfigServerConfigDataResource.java | 7 +++++-- ...onfigServerConfigDataLocationResolverTests.java | 14 ++++++++++++++ 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/spring-cloud-config-client/src/main/java/org/springframework/cloud/config/client/ConfigClientProperties.java b/spring-cloud-config-client/src/main/java/org/springframework/cloud/config/client/ConfigClientProperties.java index 576d8ad1..0f1a55cd 100644 --- a/spring-cloud-config-client/src/main/java/org/springframework/cloud/config/client/ConfigClientProperties.java +++ b/spring-cloud-config-client/src/main/java/org/springframework/cloud/config/client/ConfigClientProperties.java @@ -65,6 +65,11 @@ public class ConfigClientProperties { */ public static final String AUTHORIZATION = "authorization"; + /** + * Default profile value. + */ + public static final String DEFAULT_PROFILE = "default"; + /** * Flag to say that remote configuration is enabled. Default true; */ @@ -74,7 +79,7 @@ public class ConfigClientProperties { * The default profile to use when fetching remote configuration (comma-separated). * Default is "default". */ - private String profile = "default"; + private String profile = DEFAULT_PROFILE; /** * Name of application used to fetch remote properties. diff --git a/spring-cloud-config-client/src/main/java/org/springframework/cloud/config/client/ConfigServerConfigDataResource.java b/spring-cloud-config-client/src/main/java/org/springframework/cloud/config/client/ConfigServerConfigDataResource.java index e567b725..95a1b9b3 100644 --- a/spring-cloud-config-client/src/main/java/org/springframework/cloud/config/client/ConfigServerConfigDataResource.java +++ b/spring-cloud-config-client/src/main/java/org/springframework/cloud/config/client/ConfigServerConfigDataResource.java @@ -16,6 +16,7 @@ package org.springframework.cloud.config.client; +import java.util.List; import java.util.Objects; import org.springframework.boot.context.config.ConfigDataResource; @@ -46,10 +47,12 @@ public class ConfigServerConfigDataResource extends ConfigDataResource { } public String getProfiles() { - if (StringUtils.hasText(properties.getProfile())) { + List accepted = profiles.getAccepted(); + if (StringUtils.hasText(properties.getProfile()) + && !properties.getProfile().equals(ConfigClientProperties.DEFAULT_PROFILE)) { return properties.getProfile(); } - return StringUtils.collectionToCommaDelimitedString(profiles.getAccepted()); + return StringUtils.collectionToCommaDelimitedString(accepted); } @Override diff --git a/spring-cloud-config-client/src/test/java/org/springframework/cloud/config/client/ConfigServerConfigDataLocationResolverTests.java b/spring-cloud-config-client/src/test/java/org/springframework/cloud/config/client/ConfigServerConfigDataLocationResolverTests.java index 499af5d7..b4e75145 100644 --- a/spring-cloud-config-client/src/test/java/org/springframework/cloud/config/client/ConfigServerConfigDataLocationResolverTests.java +++ b/spring-cloud-config-client/src/test/java/org/springframework/cloud/config/client/ConfigServerConfigDataLocationResolverTests.java @@ -16,6 +16,7 @@ package org.springframework.cloud.config.client; +import java.util.Collections; import java.util.List; import org.junit.jupiter.api.BeforeEach; @@ -80,9 +81,22 @@ public class ConfigServerConfigDataLocationResolverTests { assertThat(resource.getProfiles()).isEqualTo("myprofile"); } + @Test + void configClientSpringProfilesActiveOverridesDefaultClientProfiles() { + ConfigServerConfigDataResource resource = testResolveProvileSpecific("myactiveprofile"); + assertThat(resource.getProfiles()).isEqualTo("myactiveprofile"); + } + private ConfigServerConfigDataResource testResolveProvileSpecific() { + return testResolveProvileSpecific("default"); + } + + private ConfigServerConfigDataResource testResolveProvileSpecific(String activeProfile) { when(context.getBootstrapContext()).thenReturn(mock(ConfigurableBootstrapContext.class)); Profiles profiles = mock(Profiles.class); + if (activeProfile != null) { + when(profiles.getAccepted()).thenReturn(Collections.singletonList(activeProfile)); + } List resources = this.resolver.resolveProfileSpecific(context, ConfigDataLocation.of("configserver:"), profiles);