如何在Spring应用程序中获取所有属性的映射?

如何在Spring应用程序中获取所有属性的映射?,spring,spring-profiles,Spring,Spring Profiles,假设我们有一个spring5+应用程序 如何获取应用程序-[env]文件中指定的所有属性的集合?找出每个属性的原始配置文件也很有趣 我想应该有一个标准的方法来实现这一点,但没有在web上找到任何提及。从Spring应用程序上下文中获取AbstractEnvironment,并遍历其EnumerablePropertySource源,发现所有属性名称就足够了,然后从环境中按名称获取属性值 AbstractEnvironment environment = getFromContext() /*i.

假设我们有一个
spring5+
应用程序

如何获取
应用程序-[env]
文件中指定的所有属性的集合?找出每个属性的原始配置文件也很有趣


我想应该有一个标准的方法来实现这一点,但没有在web上找到任何提及。

从Spring应用程序上下文中获取
AbstractEnvironment
,并遍历其
EnumerablePropertySource
源,发现所有属性名称就足够了,然后从环境中按名称获取属性值

AbstractEnvironment environment = getFromContext() /*i.e. Autowired*/;

var propsStream =
    environment
        .getPropertySources().stream()
        .flatMap(ps -> {
          if (ps instanceof EnumerablePropertySource) {
            return Arrays.stream(((EnumerablePropertySource<?>) ps).getPropertyNames());
          } else {
            return Stream.empty(); // or handle differently 
          }
        })
        .distinct()
        .map(name -> Tuple.of(name, environment.getProperty(name)));

// here Tuple is a dummy class for holding (name, value)
AbstractEnvironment=getFromContext()/*即自动连线*;
无功功率流=
环境
.getPropertySources().stream()
.flatMap(ps->{
if(EnumerablePropertySource的ps实例){
返回Arrays.stream(((EnumerablePropertySource)ps.getPropertyNames());
}否则{
返回Stream.empty();//或以不同方式处理
}
})
.distinct()
.map(name->Tuple.of(name,environment.getProperty(name));
//这里Tuple是一个用于保存(名称、值)的虚拟类

您可以注入环境对象并对其使用getPropertySources()。请参阅AbstractEnvironment。您可以查看以下资源:,