Spring Cloud Config 和 Spring Cloud Vault 的初始化顺序
Posted
技术标签:
【中文标题】Spring Cloud Config 和 Spring Cloud Vault 的初始化顺序【英文标题】:Spring Cloud Config and Spring Cloud Vault order of initialization 【发布时间】:2018-07-25 15:08:51 【问题描述】:我们正在利用 Spring Cloud Config 和 Spring Cloud Config Vault。我们想知道是否有一种“引导引导程序”的方法,即我们希望 Spring Cloud 配置服务器被命中,然后从中提取属性以在我们的保险库配置中加以利用。我们查看了订单,但它似乎不起作用,我认为这是因为后处理订单,但我希望我可能会遗漏一些东西。
【问题讨论】:
您能详细说明一下吗?你想从 Spring Cloud Config 中获取吗? Vault 服务器的主机名?还是要加载互补属性? 我想从配置服务器获取主机、方案和端口,以使用 spring cloud config vault 驱动与 vault 的连接(所以它都在 bootstrap.yml 中) 【参考方案1】:TL;DR
它不起作用。
说明
Spring Cloud 对其引导上下文的作用是设置一个应用程序上下文,其中包含一组从 Spring bean 初始化的 PropertySource
s。然后将引导上下文用作 Spring Boot 创建的实际上下文的父上下文。属性查找在其自己的上下文和父上下文中查找属性。
配置属性在启动过程的早期初始化,它们使用当前Environment
中的属性。在初始化 ConfigurationProperties
bean 时,Environment
尚不包含任何远程 PropertySource
s。
我在这里看到的唯一选项(除了创建 bootstrap-bootstrap-context)是在 main
类中使用 Spring Cloud Config 客户端,并在构建任何 Spring 上下文之前提供 Vault 属性。
【讨论】:
感谢您确认我们的假设。一如既往地感谢整个春季团队!【参考方案2】:也许你可以,但它需要PropertySourceBootstrapConfiguration#initialize()
方法覆盖。您不能禁用 bean PropertySourceBootstrapConfiguration
,但您可以通过在 CustomPropertySourceBootstrapConfiguration
中使用 applicationContext.getBeanFactory().getBean(PropertySourceBootstrapConfiguration.class).setPropertySourceLocators(new ArrayList<>())
禁用它的初始化方法(以避免过时的外部属性源调用)。
在您的 CustomPropertySourceBootstrapConfiguration#initialize
方法中,您可以从 config-server 检索属性,然后通过在 config-server secretId 中插入生成的令牌来自定义您的 vaultPropertySourceLocator
。
不要忘记将您的CustomPropertySourceBootstrapConfiguration
添加到 spring.factories。
所以,这并不容易,但这是可能的。
【讨论】:
【参考方案3】:我们使用 EnvironmentPostProcessor 创建了自定义数据源,它将在自动配置 bean 之前被调用 https://docs.spring.io/spring-boot/docs/current/reference/html/howto.html#howto.application.customize-the-environment-or-application-context
【讨论】:
虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review以上是关于Spring Cloud Config 和 Spring Cloud Vault 的初始化顺序的主要内容,如果未能解决你的问题,请参考以下文章
问题 spring-cloud-config 和 spring-cloud-bus
为生产配置 Spring Cloud Config Server 和 Spring Cloud Vault
Spring Cloud Vault 和带有 Vault 后端的 Spring Cloud Config 之间的区别