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
|
* Return the set of active profiles as explicitly set through
|
||||||
* {@link #setActiveProfiles} or if the current set of active profiles
|
* {@link #setActiveProfiles} or if the current set of active profiles
|
||||||
* is empty, check for the presence of the {@value #ACTIVE_PROFILES_PROPERTY_NAME}
|
* is empty, check for the presence of {@link #doGetActiveProfilesProperty()}
|
||||||
* property and assign its value to the set of active profiles.
|
* and assign its value to the set of active profiles.
|
||||||
* @see #getActiveProfiles()
|
* @see #getActiveProfiles()
|
||||||
* @see #ACTIVE_PROFILES_PROPERTY_NAME
|
* @see #doGetActiveProfilesProperty()
|
||||||
*/
|
*/
|
||||||
protected Set<String> doGetActiveProfiles() {
|
protected Set<String> doGetActiveProfiles() {
|
||||||
synchronized (this.activeProfiles) {
|
synchronized (this.activeProfiles) {
|
||||||
if (this.activeProfiles.isEmpty()) {
|
if (this.activeProfiles.isEmpty()) {
|
||||||
String profiles = getProperty(ACTIVE_PROFILES_PROPERTY_NAME);
|
String profiles = doGetActiveProfilesProperty();
|
||||||
if (StringUtils.hasText(profiles)) {
|
if (StringUtils.hasText(profiles)) {
|
||||||
setActiveProfiles(StringUtils.commaDelimitedListToStringArray(
|
setActiveProfiles(StringUtils.commaDelimitedListToStringArray(
|
||||||
StringUtils.trimAllWhitespace(profiles)));
|
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
|
@Override
|
||||||
public void setActiveProfiles(String... profiles) {
|
public void setActiveProfiles(String... profiles) {
|
||||||
Assert.notNull(profiles, "Profile array must not be null");
|
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
|
* Return the set of default profiles explicitly set via
|
||||||
* {@link #setDefaultProfiles(String...)} or if the current set of default profiles
|
* {@link #setDefaultProfiles(String...)} or if the current set of default profiles
|
||||||
* consists only of {@linkplain #getReservedDefaultProfiles() reserved default
|
* consists only of {@linkplain #getReservedDefaultProfiles() reserved default
|
||||||
* profiles}, then check for the presence of the
|
* profiles}, then check for the presence of {@link #doGetActiveProfilesProperty()}
|
||||||
* {@value #DEFAULT_PROFILES_PROPERTY_NAME} property and assign its value (if any)
|
* and assign its value (if any) to the set of default profiles.
|
||||||
* to the set of default profiles.
|
|
||||||
* @see #AbstractEnvironment()
|
* @see #AbstractEnvironment()
|
||||||
* @see #getDefaultProfiles()
|
* @see #getDefaultProfiles()
|
||||||
* @see #DEFAULT_PROFILES_PROPERTY_NAME
|
|
||||||
* @see #getReservedDefaultProfiles()
|
* @see #getReservedDefaultProfiles()
|
||||||
|
* @see #doGetDefaultProfilesProperty()
|
||||||
*/
|
*/
|
||||||
protected Set<String> doGetDefaultProfiles() {
|
protected Set<String> doGetDefaultProfiles() {
|
||||||
synchronized (this.defaultProfiles) {
|
synchronized (this.defaultProfiles) {
|
||||||
if (this.defaultProfiles.equals(getReservedDefaultProfiles())) {
|
if (this.defaultProfiles.equals(getReservedDefaultProfiles())) {
|
||||||
String profiles = getProperty(DEFAULT_PROFILES_PROPERTY_NAME);
|
String profiles = doGetDefaultProfilesProperty();
|
||||||
if (StringUtils.hasText(profiles)) {
|
if (StringUtils.hasText(profiles)) {
|
||||||
setDefaultProfiles(StringUtils.commaDelimitedListToStringArray(
|
setDefaultProfiles(StringUtils.commaDelimitedListToStringArray(
|
||||||
StringUtils.trimAllWhitespace(profiles)));
|
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
|
* Specify the set of profiles to be made active by default if no other profiles
|
||||||
* are explicitly made active through {@link #setActiveProfiles}.
|
* are explicitly made active through {@link #setActiveProfiles}.
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,8 @@ package org.springframework.core.env;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
@ -105,6 +107,30 @@ class CustomEnvironmentTests {
|
||||||
assertThat(env.acceptsProfiles(Profiles.of("a1 | a2"))).isFalse();
|
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() {
|
private Profiles defaultProfile() {
|
||||||
return Profiles.of(AbstractEnvironment.RESERVED_DEFAULT_PROFILE_NAME);
|
return Profiles.of(AbstractEnvironment.RESERVED_DEFAULT_PROFILE_NAME);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue