From f5e5753dd53a21b0951bf7c0c46f562e7ed978be Mon Sep 17 00:00:00 2001 From: spencergibb Date: Mon, 14 Dec 2020 21:32:53 -0500 Subject: [PATCH] Prefer client profiles over spring.profiles.active If spring.clout.config.profile is set use it otherwise use profiles set by spring boot. Fixes gh-1764 --- .../client/ConfigServerConfigDataLoader.java | 2 +- .../ConfigServerConfigDataResource.java | 8 ++++-- ...ServerConfigDataLocationResolverTests.java | 28 +++++++++++++++++++ 3 files changed, 35 insertions(+), 3 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 7a78615d..47dbf308 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 @@ -210,7 +210,7 @@ public class ConfigServerConfigDataLoader implements ConfigDataLoader 1) { 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 4f794e46..e567b725 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 @@ -21,6 +21,7 @@ import java.util.Objects; import org.springframework.boot.context.config.ConfigDataResource; import org.springframework.boot.context.config.Profiles; import org.springframework.core.style.ToStringCreator; +import org.springframework.util.StringUtils; public class ConfigServerConfigDataResource extends ConfigDataResource { @@ -44,8 +45,11 @@ public class ConfigServerConfigDataResource extends ConfigDataResource { return this.optional; } - public Profiles getProfiles() { - return this.profiles; + public String getProfiles() { + if (StringUtils.hasText(properties.getProfile())) { + return properties.getProfile(); + } + return StringUtils.collectionToCommaDelimitedString(profiles.getAccepted()); } @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 9e4112e2..499af5d7 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,11 +16,15 @@ package org.springframework.cloud.config.client; +import java.util.List; + import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.springframework.boot.ConfigurableBootstrapContext; import org.springframework.boot.context.config.ConfigDataLocation; import org.springframework.boot.context.config.ConfigDataLocationResolverContext; +import org.springframework.boot.context.config.Profiles; import org.springframework.boot.context.properties.bind.Binder; import org.springframework.boot.logging.DeferredLog; import org.springframework.mock.env.MockEnvironment; @@ -63,4 +67,28 @@ public class ConfigServerConfigDataLocationResolverTests { assertThat(this.resolver.isResolvable(this.context, ConfigDataLocation.of("configserver:"))).isFalse(); } + @Test + void defaultSpringProfiles() { + ConfigServerConfigDataResource resource = testResolveProvileSpecific(); + assertThat(resource.getProfiles()).isEqualTo("default"); + } + + @Test + void configClientProfilesOverridesSpringProfilesActive() { + this.environment.setProperty(ConfigClientProperties.PREFIX + ".profile", "myprofile"); + ConfigServerConfigDataResource resource = testResolveProvileSpecific(); + assertThat(resource.getProfiles()).isEqualTo("myprofile"); + } + + private ConfigServerConfigDataResource testResolveProvileSpecific() { + when(context.getBootstrapContext()).thenReturn(mock(ConfigurableBootstrapContext.class)); + Profiles profiles = mock(Profiles.class); + + List resources = this.resolver.resolveProfileSpecific(context, + ConfigDataLocation.of("configserver:"), profiles); + assertThat(resources).hasSize(1); + ConfigServerConfigDataResource resource = resources.get(0); + return resource; + } + }