Spring Cloud Config и Spring Cloud Vault порядок инициализации
Мы используем Spring Cloud Config и Spring Cloud Config Vault. Мы хотели бы знать, существует ли способ "начальной загрузки начальной загрузки", то есть мы хотим, чтобы сервер конфигурации весеннего облака был запущен, а затем извлекал свойства из этого, чтобы использовать его в нашей конфигурации хранилища. Мы посмотрели на заказ, но он не сработал, и я предполагаю, что это из-за заказа на постобработку, но я надеялся, что что-то упустил.
3 ответа
TL;DR
Не работает
объяснение
То, что Spring Cloud делает со своим контекстом начальной загрузки, - это настройка контекста приложения, который содержит набор PropertySource
s инициализируется из Spring beans. Затем контекст начальной загрузки используется как родительский контекст для фактического контекста, созданного Spring Boot. Поиск свойств ищет свойства в своем собственном контексте и в родительском контексте.
Свойства конфигурации инициализируются очень рано в процессе запуска, и они используют свойства из текущего Environment
, В это время ConfigurationProperties
бобы инициализируются, Environment
еще не содержит удаленного PropertySource
s.
Единственный вариант, который я вижу здесь (кроме создания 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
на весенние заводы.
Так что это непросто, но возможно.