2016-04-02 5 views
5

У нас есть приложение Spring-Boot, в котором мы используем Eureka, чтобы обнаружить Spring Cloud Config и получить конфигурации. Мы интегрируем Vault для обеспечения безопасной/конфиденциальной информации и испытываем проблемы с загрузкой и разрешением параметров. Проект, который мы используем как клиент Vault, - vault-spring-boot-starter, и он отлично работает, пока мы не используем его вместе с config-сервером через eureka.bootstrap PropertySource ordering

В частности, URL доступа Eureka содержит параметры/учетные данные, которые извлекаются из хранилища. Когда все компоненты включены, запрос Eureka завершается с ошибкой, когда DiscoveryClient пытается получить доступ к URL, в котором параметры еще не были заполнены/заменены.

(Example: http://${user}:${pass}.....)

Попытка указать @Order и

@AutoConfigureBefore({EurekaClientAutoConfiguration.class, DiscoveryClientConfigServiceAutoConfiguration.class})

в VaultBootstrapConfiguration хранилище-весна-Boot-стартера, кажется, не имеют никакого влияния. Я считаю, что проблема связана с упорядочением, в котором обрабатываются PropertySources, но я не могу успешно внедрить PropertySource Vault перед Eureka's. Как мы можем указать логику пользовательского/Vault PropertySourceLocator для выполнения перед открытием DiscoveryClient и сервером конфигурации?

Update

Мы используем пружинными облако версии Angel.SR6.

Я добавил @Order (Ordered.HIGHEST_PRECEDENCE) аннотацию к VaultPropertySourceLocator, как рекомендовано, но разрешение параметр по-прежнему не работает. С включенным ведением журнала отладки Spring я считаю, что Vault PropertySource на самом деле существует, но по какой-то причине он не используется. Я изменил код, чтобы VaultConfiguration реализовал SmartLifecycle и Ordered (с порядком = 0 и фазой = Integer.MIN_VALUE), которые могут повлиять на вещи. Мне нужно будет сделать больше отладки, чтобы попытаться изолировать происходящее.

+0

Какую версию весеннего облака вы используете? – spencergibb

+0

Рассматривая код, вам, вероятно, понадобится '@ Order' на https://github.com/markramach/vault-spring-boot-starter/blob/master/src/main/java/com/flyover/boot/vault /config/VaultPropertySourceLocator.java – spencergibb

+0

Другими словами, механизм поддержки PropertySourceLocator поддерживает механизм упорядочивания. – spencergibb

ответ

1

Я смог решить мою проблему. Я пробовал несколько разных подходов, включая Spring AOP и LTW, которые не работали с попыткой создания экземпляров слишком рано - для того, чтобы VaultPropertySource был доступен до того, как Eureka DiscoveryClient совершил звонок.

Мой рабочий раствор включает в себя:

Для инстанцирования бобов Vault ранее Eureka фасоли и конфигурации начинается инстанцирование:

  • @Ordered или реализации PriorityOrdered в VaultPropertySourceLocator. Мой VaultPropertySourceLocator также включает в себя реализацию SmartLifecycle, поскольку я видел недетерминированный результат с частями экземпляра Eureka bean, который иногда происходит перед фасолью Vault. Мой заказ: Ordered.HIGHEST_PRECEDENCE, а фаза - Integer.MIN_VALUE.

Для регистрации VaultPropertySource как PropertySource, который используется для разрешения параметров при Eureka фасоль/проводка конфигурации происходит:

  • Переходя в отношении окружающей среды в VaultPropertySource, которая самостоятельно регистрирует себя в списке самых environmentSources и существует, когда Eureka beans создает экземпляр и устанавливает свойство serviceUrl во время создания и разворачивания/разрешения объектов EurekaClientConfigBean.

 Смежные вопросы

  • Нет связанных вопросов^_^