Как получить доступ к значениям конфигурации приложения Spring на основе запросов? - PullRequest
0 голосов
/ 04 июля 2019

В одном из моих приложений Spring Boot у меня есть контроллер, который должен читать из application.yml для доступа к внешнему API. У меня есть настройки организации во внешнем API, аналогичном организации github, и каждая организация имеет свой собственный идентификатор клиента и секретный ключ.

Мой application.yml выглядит примерно так.

organization:
  abc:
    client:
      clientId: f29e347add73
      clientSecret: dad2404e63ec4cd   

  xyz:
    client:
      clientId: 0884340cf3e793
      clientSecret: a26ff0119d907e9      

В настоящее время я могу подобрать значение свойства в моем контроллере следующим образом.

@Value("${organization.abc.client.clientId}")
private String abcClientId;
@Value("${organization.abc.client.clientSecret}")
private String abcClientSecret;

Но мне нужно вместо жесткого кодирования, если приходит запрос на abc, конфигурация для abc подбирается, а когда для xyz приходит конфигурация для xyz , То же самое для любого номера организации, которую я продолжаю добавлять в файл application.yml.

Пожалуйста, помогите мне, как этого добиться.

Ответы [ 2 ]

0 голосов
/ 04 июля 2019

Если вы можете переписать ваш applicaiotn.yml следующим образом, вы можете прочитать его в список объектов с помощью @ConfigurationProperties.

organization:
  list:
    -
      name: abc
      client:
        clientId: f29e347add73
        clientSecret: dad2404e63ec4cd
    -
      name: xyz
      client:
        clientId: 0884340cf3e793
        clientSecret: a26ff0119d907e9

Создать класс для сопоставления свойств со списком объектов:

@Service
@ConfigurationProperties(prefix="organization")
public class ConfigurationService {
    private List<Org> list = new ArrayList<>();
    //getters and setters

    public static class Org {
        private String name;
        private Client client;
        //getters and setters
    }

    public static class Client {
        private String clientId;
        private String clientSecret;
        //getter and setter
    }
}

Теперь вы можете получить доступ к этому списку, как ...

@Autowired
ConfigurationService configurationService;
0 голосов
/ 04 июля 2019

Вы можете добавить Environment (инициализируется по умолчанию Spring Boot) следующим образом:

@Autowired
private Environment env;

А затем используйте его как:

env.getProperty("my-property")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...