diff --git a/spring-boot/src/main/java/org/springframework/boot/bind/PropertySourceUtils.java b/spring-boot/src/main/java/org/springframework/boot/bind/PropertySourceUtils.java index 450acdeed79..b2a268bd865 100644 --- a/spring-boot/src/main/java/org/springframework/boot/bind/PropertySourceUtils.java +++ b/spring-boot/src/main/java/org/springframework/boot/bind/PropertySourceUtils.java @@ -67,7 +67,7 @@ public abstract class PropertySourceUtils { .getPropertyNames()) { String key = PropertySourceUtils.getSubKey(name, rootPrefix, keyPrefixes); - if (key != null) { + if (key != null && !subProperties.containsKey(key)) { subProperties.put(key, source.getProperty(name)); } } diff --git a/spring-boot/src/test/java/org/springframework/boot/bind/RelaxedPropertyResolverTests.java b/spring-boot/src/test/java/org/springframework/boot/bind/RelaxedPropertyResolverTests.java index dbd1ac4020b..4fbdfcf54ce 100644 --- a/spring-boot/src/test/java/org/springframework/boot/bind/RelaxedPropertyResolverTests.java +++ b/spring-boot/src/test/java/org/springframework/boot/bind/RelaxedPropertyResolverTests.java @@ -16,20 +16,24 @@ package org.springframework.boot.bind; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.nullValue; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThat; + import java.util.LinkedHashMap; import java.util.Map; +import java.util.Properties; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import org.springframework.core.env.MapPropertySource; +import org.springframework.core.env.MutablePropertySources; +import org.springframework.core.env.PropertiesPropertySource; import org.springframework.core.env.StandardEnvironment; -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.nullValue; -import static org.junit.Assert.assertThat; - /** * Tests for {@link RelaxedPropertyResolver}. * @@ -173,4 +177,30 @@ public class RelaxedPropertyResolverTests { assertThat(subProperties.get("a.c"), equalTo((Object) "2")); assertThat(subProperties.get("a.d"), equalTo((Object) "3")); } + + @Test + public void testPropertySource() throws Exception { + Properties properties; + PropertiesPropertySource propertySource; + String propertyPrefix = "spring.datasource."; + String propertyName = "password"; + String fullPropertyName = propertyPrefix + propertyName; + StandardEnvironment environment = new StandardEnvironment(); + MutablePropertySources sources = environment.getPropertySources(); + properties = new Properties(); + properties.put(fullPropertyName, "systemPassword"); + propertySource = new PropertiesPropertySource("system", properties); + sources.addLast(propertySource); + properties = new Properties(); + properties.put(fullPropertyName, "propertiesPassword"); + propertySource = new PropertiesPropertySource("properties", properties); + sources.addLast(propertySource); + RelaxedPropertyResolver propertyResolver = new RelaxedPropertyResolver( + environment, propertyPrefix); + String directProperty = propertyResolver.getProperty(propertyName); + Map subProperties = propertyResolver.getSubProperties(""); + String subProperty = (String) subProperties.get(propertyName); + assertEquals(directProperty, subProperty); + } + }