Пользовательский PropertyPlaceholderConfigurer не разрешается - PullRequest
0 голосов
/ 29 мая 2019

Привет, я новичок в Spring Boot (но уже некоторое время использую Spring в своих приложениях).Я пытаюсь использовать пользовательский SSM PropertyPlaceholderConfigurer , основанный на моем клиенте SSM , который считывает мои свойства из AWS SSM, в дополнение к свойствам в моем обычном application.properties.Этот код прекрасно работает в моем приложении до загрузки.Однако в новом приложении я вижу, что оно переопределяет application.properties.И это, кажется, хорошо задокументированная проблема.

Поэтому я решил включить файл application.properties в свой пользовательский класс PropertyPlaceholderConfigurer и загрузить все свойства вместе, но он не разрешает какие-либо свойства в application.properties, помеченные знаком «$ {}», и разрешаетпо моему выбору.Что еще мне нужно сделать?

В качестве альтернативы я попытался получить свойства, которые мне нужно загрузить из SSM, для загрузки через EnvironmentPostProcessor, но на этом этапе ему не удалось подключиться к серверу AWS SSM.в процессе загрузки (не знаю почему)

1 Ответ

0 голосов
/ 30 мая 2019

Ответ заключается в использовании EnvironmentPostProcessor. Работает отлично. Смотрите код ниже:

import com.amazonaws.auth.DefaultAWSCredentialsProviderChain;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.env.EnvironmentPostProcessor;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.MapPropertySource;

import java.util.HashMap;
import java.util.Map;

/**
 * This class loads SSM parameters base on region and environment
 * Needs to be added to spring.factories class so that it will be invoked. as follow:
 * org.springframework.boot.env.EnvironmentPostProcessor=<full package>.SSMEnvironmentPostProcessor
 * Add the SSM propeties to other properties already set
 */

public class SSMEnvironmentPostProcessor implements EnvironmentPostProcessor {
    private static final String QUOTE = "\"";

    @Override
    public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
        SSMClient ssmClient = new SSMClient(DefaultAWSCredentialsProviderChain.getInstance(), System.getProperty("env" +
                ".region"), new ClientConfiguration());
        ssmClient.init();
        Map<String, Object> parameters = new HashMap<>();
        ssmClient.getParametersByPath("/" + System.getProperty("env"), true).entrySet().stream()
                .forEach(entry -> parameters.put(entry.getKey(), entry.getValue()));

        MapPropertySource mapPropertySource = new MapPropertySource("ssm", parameters);
        environment.getPropertySources().addLast(mapPropertySource);
    }




}




Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...