From 276a9a0eecfee644f708d5d624d267a553c0e2d2 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Thu, 23 Nov 2017 12:58:48 +0000 Subject: [PATCH] Reflect each source's values in env endpoint's response Previously, the env endpoint would use the entire environment to get the value of each property in a source. This meant that when there were multiple sources with the same property, the value from the source with the highest precedence would be used for every source that contains the property. This commit update the endpoint to retrieve the value from the property source that is being described, rather than resolving it against all the environment's property sources. Closes gh-10883 --- .../actuate/endpoint/EnvironmentEndpoint.java | 4 +++- .../endpoint/EnvironmentEndpointTests.java | 20 +++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/EnvironmentEndpoint.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/EnvironmentEndpoint.java index cbb937dd15..7a2292cfe2 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/EnvironmentEndpoint.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/EnvironmentEndpoint.java @@ -69,7 +69,9 @@ public class EnvironmentEndpoint extends AbstractEndpoint> { EnumerablePropertySource enumerable = (EnumerablePropertySource) source; Map properties = new LinkedHashMap(); for (String name : enumerable.getPropertyNames()) { - Object resolved = resolver.getProperty(name, Object.class); + Object property = source.getProperty(name); + Object resolved = property instanceof String + ? resolver.resolvePlaceholders((String) property) : property; properties.put(name, sanitize(name, resolved)); } properties = postProcessSourceProperties(sourceName, properties); diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/EnvironmentEndpointTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/EnvironmentEndpointTests.java index f2a7ffc364..807bcb8f9d 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/EnvironmentEndpointTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/EnvironmentEndpointTests.java @@ -279,6 +279,26 @@ public class EnvironmentEndpointTests extends AbstractEndpointTestssingletonMap("a", "alpha"))); + propertySources.addFirst(new MapPropertySource("two", + Collections.singletonMap("a", "apple"))); + this.context.register(Config.class); + this.context.refresh(); + EnvironmentEndpoint report = getEndpointBean(); + Map env = report.invoke(); + Map sourceOne = (Map) env.get("one"); + assertThat(sourceOne).containsEntry("a", "alpha"); + Map sourceTwo = (Map) env.get("two"); + assertThat(sourceTwo).containsEntry("a", "apple"); + } + private void clearSystemProperties(String... properties) { for (String property : properties) { System.clearProperty(property);