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 初始化的 PropertySources。然后将引导上下文用作 Spring Boot 创建的实际上下文的父上下文。属性查找在其自己的上下文和父上下文中查找属性。

配置属性在启动过程的早期初始化,它们使用当前Environment 中的属性。在初始化 ConfigurationProperties bean 时,Environment 尚不包含任何远程 PropertySources。

我在这里看到的唯一选项(除了创建 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(18)——gateway

Spring Cloud Vault 和带有 Vault 后端的 Spring Cloud Config 之间的区别

Spring Cloud Config 和 Spring Cloud Vault 的初始化顺序

Spring Cloud Config - 客户端使用