Browse Source

Merge branch '4.0.x'

main
Ryan Baxter 1 year ago
parent
commit
f51cc1fd92
  1. 11
      spring-cloud-context/src/main/java/org/springframework/cloud/bootstrap/config/PropertySourceBootstrapConfiguration.java
  2. 17
      spring-cloud-context/src/test/java/org/springframework/cloud/bootstrap/config/BootstrapConfigurationTests.java
  3. 1
      spring-cloud-context/src/test/resources/application.properties

11
spring-cloud-context/src/main/java/org/springframework/cloud/bootstrap/config/PropertySourceBootstrapConfiguration.java

@ -38,7 +38,6 @@ import org.springframework.boot.logging.LogFile;
import org.springframework.boot.logging.LoggingInitializationContext; import org.springframework.boot.logging.LoggingInitializationContext;
import org.springframework.boot.logging.LoggingSystem; import org.springframework.boot.logging.LoggingSystem;
import org.springframework.cloud.bootstrap.BootstrapApplicationListener; import org.springframework.cloud.bootstrap.BootstrapApplicationListener;
import org.springframework.cloud.bootstrap.BootstrapConfigFileApplicationListener;
import org.springframework.cloud.context.environment.EnvironmentChangeEvent; import org.springframework.cloud.context.environment.EnvironmentChangeEvent;
import org.springframework.cloud.logging.LoggingRebinder; import org.springframework.cloud.logging.LoggingRebinder;
import org.springframework.context.ApplicationContextInitializer; import org.springframework.context.ApplicationContextInitializer;
@ -284,6 +283,12 @@ public class PropertySourceBootstrapConfiguration implements ApplicationListener
private List<String> addActiveProfilesTo(List<String> profiles, PropertySource<?> propertySource, private List<String> addActiveProfilesTo(List<String> profiles, PropertySource<?> propertySource,
ConfigurableEnvironment environment) { 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); return addProfilesTo(profiles, propertySource, AbstractEnvironment.ACTIVE_PROFILES_PROPERTY_NAME, environment);
} }
@ -296,9 +301,7 @@ public class PropertySourceBootstrapConfiguration implements ApplicationListener
} }
} }
else { else {
Collections.addAll(profiles, getProfilesForValue( Collections.addAll(profiles, getProfilesForValue(propertySource.getProperty(property), environment));
propertySource.getProperty(BootstrapConfigFileApplicationListener.INCLUDE_PROFILES_PROPERTY),
environment));
} }
return profiles; return profiles;
} }

17
spring-cloud-context/src/test/java/org/springframework/cloud/bootstrap/config/BootstrapConfigurationTests.java

@ -656,6 +656,23 @@ public class BootstrapConfigurationTests {
then(this.context.getEnvironment().getProperty("foo")).isEqualTo("bar"); then(this.context.getEnvironment().getProperty("foo")).isEqualTo("bar");
} }
@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();
}
@Configuration(proxyBeanMethods = false) @Configuration(proxyBeanMethods = false)
@EnableConfigurationProperties @EnableConfigurationProperties
protected static class BareConfiguration { protected static class BareConfiguration {

1
spring-cloud-context/src/test/resources/application.properties

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

Loading…
Cancel
Save