Приоритет разрешения заполнителя свойства при использовании хранилища и консула - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть вопрос о приоритете разрешения заполнителя при использовании consul-config и vault-config Я создал простое приложение, используя эту информацию

Мои зависимости:

dependencies {
compile('org.springframework.cloud:spring-cloud-starter-consul-config')
compile('org.springframework.cloud:spring-cloud-starter-vault-config')

compile('org.springframework.boot:spring-boot-starter-webflux')
compile('org.springframework.cloud:spring-cloud-starter')
testCompile('org.springframework.boot:spring-boot-starter-test')
}

Обратите внимание, что я не использую обнаружение служб.

Следующим шагом я создал свойство foo.prop = consul (в хранилище консула) и foo.prop = vault.

При использовании:

@Value("${foo.prop}")
private String prop;

Я получаю vault в качестве вывода, но когда я удаляю foo.prop из хранилища и перезапускаю приложение, я получаю consul.

Я делал это несколько раз в разных комбинациях, и кажется, что конфигурация хранилища имеет более высокий приоритет, чем консул.

У меня вопрос, где я могу найти информацию о стратегии решения (представьте, что мы добавили третье zookeeper-config). Кажется, что в документации по пружине молчат об этом.

1 Ответ

0 голосов
/ 09 сентября 2018

Из того, что я понял, отлаживая исходный код Spring ... Теперь Vault имеет приоритет.

Результаты моего расследования: PropertySourceBootstrapConfiguration.java отвечает за инициализацию всех источников свойств на этапе начальной загрузки. Перед поиском свойств сортирует все propertySourceLocators по Порядку:

AnnotationAwareOrderComparator.sort(this.propertySourceLocators);

Vault всегда "выигрывает", потому что экземпляр LeasingVaultPropertySourceLocator (по крайней мере, этот был создан во время моей отладки) реализует интерфейс PriorityOrdered. Экземпляр ConsulPropertySourceLocator имеет аннотацию @Order(0). Согласно OrderComparator : экземпляр PriorityOrdered является «более важным».

Если у вас есть другой источник свойства PriorityOrdered (например, пользовательский), вы можете повлиять на этот порядок, установив spring.cloud.vault.config.order для Vault.

Пока без настройки я не знаю, как изменить приоритет между Vault и Consul.

...