Fix logic affecting files loaded

The problem fixed here is that the Loader keeps track of the profiles it
is going to look at for loading files, but ignores any that were already
active in the Environment if the listener is called initially with
spring.profiles.active not empty.

Closes gh-4261
This commit is contained in:
Dave Syer 2015-10-21 11:43:50 -04:00 committed by Stephane Nicoll
parent 2e2ebeb9fa
commit 06bb6bd1e1
2 changed files with 21 additions and 11 deletions

View File

@ -314,17 +314,15 @@ public class ConfigFileApplicationListener
maybeActivateProfiles(
this.environment.getProperty(ACTIVE_PROFILES_PROPERTY));
}
else {
// Pre-existing active profiles set via Environment.setActiveProfiles()
// are additional profiles and config files are allowed to add more if
// they want to, so don't call addActiveProfiles() here.
List<String> list = new ArrayList<String>(
Arrays.asList(this.environment.getActiveProfiles()));
// Reverse them so the order is the same as from getProfilesForValue()
// (last one wins when properties are eventually resolved)
Collections.reverse(list);
this.profiles.addAll(list);
}
// Pre-existing active profiles set via Environment.setActiveProfiles()
// are additional profiles and config files are allowed to add more if
// they want to, so don't call addActiveProfiles() here.
List<String> list = new ArrayList<String>(
Arrays.asList(this.environment.getActiveProfiles()));
// Reverse them so the order is the same as from getProfilesForValue()
// (last one wins when properties are eventually resolved)
Collections.reverse(list);
this.profiles.addAll(list);
// The default profile for these purposes is represented as null. We add it
// last so that it is first out of the queue (active profiles will then

View File

@ -341,6 +341,18 @@ public class ConfigFileApplicationListenerTests {
assertThat(property, equalTo("fromprofilepropertiesfile"));
}
@Test
public void profilesAddedToEnvironmentAndViaProperty() throws Exception {
EnvironmentTestUtils.addEnvironment(this.environment,
"spring.profiles.active:foo");
this.environment.addActiveProfile("dev");
this.initializer.onApplicationEvent(this.event);
assertThat(this.environment.getActiveProfiles(),
equalTo(new String[] { "foo", "dev" }));
assertThat(this.environment.getProperty("my.property"),
equalTo("fromdevpropertiesfile"));
}
@Test
public void yamlProfiles() throws Exception {
this.initializer.setSearchNames("testprofiles");