Allow bypass of active/default properties
Introduce protected methods that can be used to bypass or change the way that active and default property values are read. See gh-26461
This commit is contained in:
parent
9c6b1b645d
commit
da3ff29e88
|
|
@ -227,15 +227,15 @@ public abstract class AbstractEnvironment implements ConfigurableEnvironment {
|
|||
/**
|
||||
* Return the set of active profiles as explicitly set through
|
||||
* {@link #setActiveProfiles} or if the current set of active profiles
|
||||
* is empty, check for the presence of the {@value #ACTIVE_PROFILES_PROPERTY_NAME}
|
||||
* property and assign its value to the set of active profiles.
|
||||
* is empty, check for the presence of {@link #doGetActiveProfilesProperty()}
|
||||
* and assign its value to the set of active profiles.
|
||||
* @see #getActiveProfiles()
|
||||
* @see #ACTIVE_PROFILES_PROPERTY_NAME
|
||||
* @see #doGetActiveProfilesProperty()
|
||||
*/
|
||||
protected Set<String> doGetActiveProfiles() {
|
||||
synchronized (this.activeProfiles) {
|
||||
if (this.activeProfiles.isEmpty()) {
|
||||
String profiles = getProperty(ACTIVE_PROFILES_PROPERTY_NAME);
|
||||
String profiles = doGetActiveProfilesProperty();
|
||||
if (StringUtils.hasText(profiles)) {
|
||||
setActiveProfiles(StringUtils.commaDelimitedListToStringArray(
|
||||
StringUtils.trimAllWhitespace(profiles)));
|
||||
|
|
@ -245,6 +245,15 @@ public abstract class AbstractEnvironment implements ConfigurableEnvironment {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the property value for the active profiles.
|
||||
* @see #ACTIVE_PROFILES_PROPERTY_NAME
|
||||
* @since 5.3.4
|
||||
*/
|
||||
protected String doGetActiveProfilesProperty() {
|
||||
return getProperty(ACTIVE_PROFILES_PROPERTY_NAME);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setActiveProfiles(String... profiles) {
|
||||
Assert.notNull(profiles, "Profile array must not be null");
|
||||
|
|
@ -282,18 +291,17 @@ public abstract class AbstractEnvironment implements ConfigurableEnvironment {
|
|||
* Return the set of default profiles explicitly set via
|
||||
* {@link #setDefaultProfiles(String...)} or if the current set of default profiles
|
||||
* consists only of {@linkplain #getReservedDefaultProfiles() reserved default
|
||||
* profiles}, then check for the presence of the
|
||||
* {@value #DEFAULT_PROFILES_PROPERTY_NAME} property and assign its value (if any)
|
||||
* to the set of default profiles.
|
||||
* profiles}, then check for the presence of {@link #doGetActiveProfilesProperty()}
|
||||
* and assign its value (if any) to the set of default profiles.
|
||||
* @see #AbstractEnvironment()
|
||||
* @see #getDefaultProfiles()
|
||||
* @see #DEFAULT_PROFILES_PROPERTY_NAME
|
||||
* @see #getReservedDefaultProfiles()
|
||||
* @see #doGetDefaultProfilesProperty()
|
||||
*/
|
||||
protected Set<String> doGetDefaultProfiles() {
|
||||
synchronized (this.defaultProfiles) {
|
||||
if (this.defaultProfiles.equals(getReservedDefaultProfiles())) {
|
||||
String profiles = getProperty(DEFAULT_PROFILES_PROPERTY_NAME);
|
||||
String profiles = doGetDefaultProfilesProperty();
|
||||
if (StringUtils.hasText(profiles)) {
|
||||
setDefaultProfiles(StringUtils.commaDelimitedListToStringArray(
|
||||
StringUtils.trimAllWhitespace(profiles)));
|
||||
|
|
@ -303,6 +311,15 @@ public abstract class AbstractEnvironment implements ConfigurableEnvironment {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the property value for the default profiles.
|
||||
* @see #DEFAULT_PROFILES_PROPERTY_NAME
|
||||
* @since 5.3.4
|
||||
*/
|
||||
protected String doGetDefaultProfilesProperty() {
|
||||
return getProperty(DEFAULT_PROFILES_PROPERTY_NAME);
|
||||
}
|
||||
|
||||
/**
|
||||
* Specify the set of profiles to be made active by default if no other profiles
|
||||
* are explicitly made active through {@link #setActiveProfiles}.
|
||||
|
|
|
|||
|
|
@ -18,6 +18,8 @@ package org.springframework.core.env;
|
|||
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
|
@ -105,6 +107,30 @@ class CustomEnvironmentTests {
|
|||
assertThat(env.acceptsProfiles(Profiles.of("a1 | a2"))).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void withNoProfileProperties() {
|
||||
ConfigurableEnvironment env = new AbstractEnvironment() {
|
||||
|
||||
@Override
|
||||
protected String doGetActiveProfilesProperty() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String doGetDefaultProfilesProperty() {
|
||||
return null;
|
||||
}
|
||||
|
||||
};
|
||||
Map<String, Object> values = new LinkedHashMap<>();
|
||||
values.put(AbstractEnvironment.ACTIVE_PROFILES_PROPERTY_NAME, "a,b,c");
|
||||
values.put(AbstractEnvironment.DEFAULT_PROFILES_PROPERTY_NAME, "d,e,f");
|
||||
PropertySource<?> propertySource = new MapPropertySource("test", values);
|
||||
env.getPropertySources().addFirst(propertySource);
|
||||
assertThat(env.getActiveProfiles()).isEmpty();
|
||||
assertThat(env.getDefaultProfiles()).containsExactly(AbstractEnvironment.RESERVED_DEFAULT_PROFILE_NAME);
|
||||
}
|
||||
|
||||
private Profiles defaultProfile() {
|
||||
return Profiles.of(AbstractEnvironment.RESERVED_DEFAULT_PROFILE_NAME);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue