Skip to content

Commit

Permalink
Fix #1285 Spring Cloud activates unexpected profiles when some condit…
Browse files Browse the repository at this point in the history
…ions met
  • Loading branch information
leovx committed Sep 29, 2023
1 parent 464a982 commit 02f21f7
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -285,6 +285,11 @@ private Set<String> addIncludedProfilesTo(Set<String> profiles, PropertySource<?

private List<String> addActiveProfilesTo(List<String> profiles, PropertySource<?> propertySource,
ConfigurableEnvironment environment) {
// According to Spring Boot, "spring.profiles.active" should have priority,
// only value from property source with the highest priority wins.
// Once settled, ignore others
if(!profiles.isEmpty())
return profiles;
return addProfilesTo(profiles, propertySource, AbstractEnvironment.ACTIVE_PROFILES_PROPERTY_NAME, environment);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -794,4 +794,26 @@ public void setFoo(List<String> foo) {

}

@Test
void activeAndIncludeProfileFromBootstrapPropertySource_WhenMultiplePlacesHaveActiveProfileProperties_ShouldOnlyAcceptTheTopPriority() {
String[] properties = new String[]{"spring.config.use-legacy-processing=true"};
this.context = new SpringApplicationBuilder()
.web(WebApplicationType.NONE)
.properties(properties)
.sources(BareConfiguration.class)
.run("--spring.profiles.active=prod,secure");
then(this.context.getEnvironment().acceptsProfiles("prod", "secure")).isTrue();
// active profile from property sources with lower priority should not be included
then(this.context.getEnvironment().acceptsProfiles("local")).isFalse();
then(this.context.getEnvironment().getActiveProfiles()).contains("prod", "secure");
then(this.context.getEnvironment().getActiveProfiles()).doesNotContain("local");
// check if active profile value could possibly exist in other property sources with lower priority
then(this.context.getEnvironment()
.getPropertySources()
.stream()
.map(p -> p.getProperty(AbstractEnvironment.ACTIVE_PROFILES_PROPERTY_NAME))
.anyMatch("local"::equals)
).isTrue();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,4 @@ debug:true
logging.level.org.hibernate=ERROR
logging.level.com.zaxxer.hikari=ERROR
myplaceholder=${vcap.services.myvcap.myvar}
spring.profiles.active=local

0 comments on commit 02f21f7

Please sign in to comment.