diff --git a/spring-cloud-context/src/main/java/org/springframework/cloud/env/EnvironmentUtils.java b/spring-cloud-context/src/main/java/org/springframework/cloud/env/EnvironmentUtils.java index 8e8321a6..791e7cf6 100644 --- a/spring-cloud-context/src/main/java/org/springframework/cloud/env/EnvironmentUtils.java +++ b/spring-cloud-context/src/main/java/org/springframework/cloud/env/EnvironmentUtils.java @@ -1,44 +1,20 @@ package org.springframework.cloud.env; -import org.springframework.core.env.ConfigurableEnvironment; -import org.springframework.core.env.EnumerablePropertySource; -import org.springframework.core.env.Environment; -import org.springframework.core.env.PropertySource; -import org.springframework.core.env.PropertySources; - import java.util.Collections; -import java.util.LinkedHashMap; import java.util.Map; +import org.springframework.boot.context.properties.bind.Bindable; +import org.springframework.boot.context.properties.bind.Binder; +import org.springframework.core.env.Environment; + /** * @author Spencer Gibb */ public class EnvironmentUtils { - public static Map getSubProperties(Environment environment, String keyPrefix) { - if (environment instanceof ConfigurableEnvironment) { - ConfigurableEnvironment env = (ConfigurableEnvironment) environment; - Map subProperties = new LinkedHashMap<>(); - PropertySources propertySources = env.getPropertySources(); - for (PropertySource source : propertySources) { - if (source instanceof EnumerablePropertySource) { - for (String name : ((EnumerablePropertySource) source) - .getPropertyNames()) { - String key = getSubKey(name, keyPrefix); - if (key != null && !subProperties.containsKey(key)) { - subProperties.put(key, source.getProperty(name)); - } - } - } - } - return Collections.unmodifiableMap(subProperties); - } - return Collections.emptyMap(); - } - - private static String getSubKey(String name, String keyPrefix) { - if (name.startsWith(keyPrefix)) { - return name.substring(keyPrefix.length()); - } - return null; + public static Map getSubProperties(Environment environment, + String keyPrefix) { + return Binder.get(environment) + .bind(keyPrefix, Bindable.mapOf(String.class, String.class)) + .orElseGet(Collections::emptyMap); } }