Как получить карту всех свойств в приложении Spring? - PullRequest
0 голосов
/ 26 мая 2020

Предположим, что у нас есть приложение Spring 5+.

Как получить набор всех свойств, указанных в файлах application-[env]? Также интересно выяснить профиль происхождения каждого свойства.

1 Ответ

0 голосов
/ 09 июня 2020

Достаточно получить AbstractEnvironment из контекста приложения Spring и просмотреть его 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)
...