From a47d5ccd44896cc1d38f334c8dbfbacecd87f5a5 Mon Sep 17 00:00:00 2001 From: Dave Syer Date: Wed, 19 Mar 2014 10:52:12 +0000 Subject: [PATCH] Change order of config file locations to be more natural The most natural order is "more specific locations win". That way if a use has application.properties in the root of a JAR (as is normal), overrides can always be made on classpath:/config/application.properties (as well as file:./application.properties which has always been the case). Before this change properties in classpath:/config/* were over written by those in the root location, not the other way round. Fixes gh-527 --- .../context/config/ConfigFileApplicationListener.java | 4 ++-- .../config/ConfigFileApplicationListenerTests.java | 9 +++++++++ .../src/test/resources/config/specific.properties | 1 + spring-boot/src/test/resources/specific.properties | 1 + 4 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 spring-boot/src/test/resources/config/specific.properties create mode 100644 spring-boot/src/test/resources/specific.properties diff --git a/spring-boot/src/main/java/org/springframework/boot/context/config/ConfigFileApplicationListener.java b/spring-boot/src/main/java/org/springframework/boot/context/config/ConfigFileApplicationListener.java index f2a1bc6aa6d..1c256fb44b2 100644 --- a/spring-boot/src/main/java/org/springframework/boot/context/config/ConfigFileApplicationListener.java +++ b/spring-boot/src/main/java/org/springframework/boot/context/config/ConfigFileApplicationListener.java @@ -96,8 +96,8 @@ public class ConfigFileApplicationListener implements private static final String CONFIG_LOCATION_PROPERTY = "spring.config.location"; - private static final String DEFAULT_SEARCH_LOCATIONS = "file:./,file:./config/," - + "classpath:/,classpath:/config/"; + private static final String DEFAULT_SEARCH_LOCATIONS = "file:./config/,file:./," + + "classpath:/config/,classpath:/"; private static final String DEFAULT_NAMES = "application"; diff --git a/spring-boot/src/test/java/org/springframework/boot/context/config/ConfigFileApplicationListenerTests.java b/spring-boot/src/test/java/org/springframework/boot/context/config/ConfigFileApplicationListenerTests.java index a36ff188796..6a8aefa6ea8 100644 --- a/spring-boot/src/test/java/org/springframework/boot/context/config/ConfigFileApplicationListenerTests.java +++ b/spring-boot/src/test/java/org/springframework/boot/context/config/ConfigFileApplicationListenerTests.java @@ -133,6 +133,15 @@ public class ConfigFileApplicationListenerTests { } } + @Test + public void moreSpecificLocationTakesPrecedenceOverRoot() throws Exception { + EnvironmentTestUtils.addEnvironment(this.environment, + "spring.config.name:specific"); + this.initializer.onApplicationEvent(this.event); + String property = this.environment.getProperty("my.property"); + assertThat(property, equalTo("specific")); + } + @Test public void loadTwoOfThreePropertiesFile() throws Exception { EnvironmentTestUtils.addEnvironment(this.environment, "spring.config.location:" diff --git a/spring-boot/src/test/resources/config/specific.properties b/spring-boot/src/test/resources/config/specific.properties new file mode 100644 index 00000000000..6a108f2dcd0 --- /dev/null +++ b/spring-boot/src/test/resources/config/specific.properties @@ -0,0 +1 @@ +my.property=specific \ No newline at end of file diff --git a/spring-boot/src/test/resources/specific.properties b/spring-boot/src/test/resources/specific.properties new file mode 100644 index 00000000000..85fab4f45e2 --- /dev/null +++ b/spring-boot/src/test/resources/specific.properties @@ -0,0 +1 @@ +my.property=root \ No newline at end of file