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
This commit is contained in:
spencergibb
2020-12-14 21:32:53 -05:00
parent a2087e05fb
commit f5e5753dd5
3 changed files with 35 additions and 3 deletions

View File

@@ -210,7 +210,7 @@ public class ConfigServerConfigDataLoader implements ConfigDataLoader<ConfigServ
String path = "/{name}/{profile}";
String name = properties.getName();
String profile = StringUtils.collectionToCommaDelimitedString(resource.getProfiles().getAccepted());
String profile = resource.getProfiles();
String token = properties.getToken();
int noOfUrls = properties.getUri().length;
if (noOfUrls > 1) {

View File

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

View File

@@ -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<ConfigServerConfigDataResource> resources = this.resolver.resolveProfileSpecific(context,
ConfigDataLocation.of("configserver:"), profiles);
assertThat(resources).hasSize(1);
ConfigServerConfigDataResource resource = resources.get(0);
return resource;
}
}