Spring Cloud Config и Spring Cloud Vault порядок инициализации

Мы используем Spring Cloud Config и Spring Cloud Config Vault. Мы хотели бы знать, существует ли способ "начальной загрузки начальной загрузки", то есть мы хотим, чтобы сервер конфигурации весеннего облака был запущен, а затем извлекал свойства из этого, чтобы использовать его в нашей конфигурации хранилища. Мы посмотрели на заказ, но он не сработал, и я предполагаю, что это из-за заказа на постобработку, но я надеялся, что что-то упустил.

3 ответа

Решение

TL;DR

Не работает

объяснение

То, что Spring Cloud делает со своим контекстом начальной загрузки, - это настройка контекста приложения, который содержит набор PropertySources инициализируется из Spring beans. Затем контекст начальной загрузки используется как родительский контекст для фактического контекста, созданного Spring Boot. Поиск свойств ищет свойства в своем собственном контексте и в родительском контексте.

Свойства конфигурации инициализируются очень рано в процессе запуска, и они используют свойства из текущего Environment, В это время ConfigurationProperties бобы инициализируются, Environment еще не содержит удаленного PropertySources.

Единственный вариант, который я вижу здесь (кроме создания bootstrap-bootstrap-context), - это использование клиента Spring Cloud Config внутри вашего main Классифицируйте и добавьте свойства Vault до создания любого контекста Spring.

Мы создали пользовательский источник данных с помощью EnvironmentPostProcessor, который будет вызываться перед автонастройкой bean-компонентов https://docs.spring.io/spring-boot/docs/current/reference/html/howto.html#howto.application.customize-the-environment- или-контекст-приложения

Наверное, можно, но для этого требуется PropertySourceBootstrapConfiguration#initialize()переопределение метода. Вы не можете отключить фасольPropertySourceBootstrapConfiguration, но вы можете отключить его метод инициализации, используя applicationContext.getBeanFactory().getBean(PropertySourceBootstrapConfiguration.class).setPropertySourceLocators(new ArrayList<>()) в CustomPropertySourceBootstrapConfiguration(чтобы избежать вызовов устаревших внешних источников свойств). В вашемCustomPropertySourceBootstrapConfiguration#initialize вы можете получить свойства с сервера конфигурации, а затем настроить свой vaultPropertySourceLocatorвставив сгенерированный в config-server secretId токена. Не забудьте добавить свойCustomPropertySourceBootstrapConfiguration на весенние заводы.

Так что это непросто, но возможно.

Другие вопросы по тегам