Respect spring.profiles.active in #addActiveProfile

Prior to this commit, calls to ConfigurableEnvironment#addActiveProfile
would cause any active profile values provided via the
"spring.profiles.active" property to be ignored.

Now these two mechanisms can be used in conjunction and work as
expected.

Issue: SPR-9944
This commit is contained in:
Chris Beams 2012-11-02 15:02:13 +01:00
parent 74e86fe52f
commit c94bc2e709
3 changed files with 14 additions and 3 deletions

View File

@ -17,7 +17,6 @@
package org.springframework.context.support;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
@ -34,7 +33,6 @@ import static org.junit.Assert.*;
*/
public class EnvironmentIntegrationTests {
@SuppressWarnings("unchecked")
@Test
public void repro() {
ConfigurableApplicationContext parent = new GenericApplicationContext();

View File

@ -240,7 +240,8 @@ public abstract class AbstractEnvironment implements ConfigurableEnvironment {
Assert.notNull(profiles, "Profile array must not be null");
this.activeProfiles.clear();
for (String profile : profiles) {
addActiveProfile(profile);
validateProfile(profile);
this.activeProfiles.add(profile);
}
}
@ -249,9 +250,11 @@ public abstract class AbstractEnvironment implements ConfigurableEnvironment {
this.logger.debug(format("Activating profile '%s'", profile));
}
validateProfile(profile);
doGetActiveProfiles();
this.activeProfiles.add(profile);
}
public String[] getDefaultProfiles() {
return StringUtils.toStringArray(doGetDefaultProfiles());
}

View File

@ -185,6 +185,16 @@ public class StandardEnvironmentTests {
assertThat(environment.getActiveProfiles().length, is(5));
}
@Test
public void addActiveProfile_whenActiveProfilesPropertyIsAlreadySet() {
ConfigurableEnvironment env = new StandardEnvironment();
assertThat(env.getProperty(ACTIVE_PROFILES_PROPERTY_NAME), nullValue());
env.getPropertySources().addFirst(new MockPropertySource().withProperty(ACTIVE_PROFILES_PROPERTY_NAME, "p1"));
assertThat(env.getProperty(ACTIVE_PROFILES_PROPERTY_NAME), equalTo("p1"));
env.addActiveProfile("p2");
assertThat(env.getActiveProfiles(), arrayContaining("p1", "p2"));
}
@Test
public void reservedDefaultProfile() {
assertThat(environment.getDefaultProfiles(), equalTo(new String[]{RESERVED_DEFAULT_PROFILE_NAME}));