diff --git a/spring-context/src/test/java/org/springframework/context/support/EnvironmentIntegrationTests.java b/spring-context/src/test/java/org/springframework/context/support/EnvironmentIntegrationTests.java index 9b11dfaf1b..8b153315f0 100644 --- a/spring-context/src/test/java/org/springframework/context/support/EnvironmentIntegrationTests.java +++ b/spring-context/src/test/java/org/springframework/context/support/EnvironmentIntegrationTests.java @@ -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(); diff --git a/spring-core/src/main/java/org/springframework/core/env/AbstractEnvironment.java b/spring-core/src/main/java/org/springframework/core/env/AbstractEnvironment.java index 4fd571b519..3c47983560 100644 --- a/spring-core/src/main/java/org/springframework/core/env/AbstractEnvironment.java +++ b/spring-core/src/main/java/org/springframework/core/env/AbstractEnvironment.java @@ -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()); } diff --git a/spring-core/src/test/java/org/springframework/core/env/StandardEnvironmentTests.java b/spring-core/src/test/java/org/springframework/core/env/StandardEnvironmentTests.java index f28dfd5958..8cec8f813d 100644 --- a/spring-core/src/test/java/org/springframework/core/env/StandardEnvironmentTests.java +++ b/spring-core/src/test/java/org/springframework/core/env/StandardEnvironmentTests.java @@ -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}));