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

Spring Cloud Config and Spring Cloud Vault order of initialization

我们正在利用 Spring Cloud Config 和 Spring Cloud Config Vault。我们想知道是否有办法 "bootstrap the bootstrap",即我们希望 spring 云配置服务器被命中,然后从中提取属性以利用我们的保险库配置。我们查看了顺序,但它似乎不起作用,我认为这是因为 post 处理顺序,但我希望我可能遗漏了一些东西。

TL;DR

没用。

说明

Spring Cloud 使用其 bootstrap 上下文所做的是设置一个应用程序上下文,其中包含一组从 Spring beans 初始化的 PropertySources。然后 bootstrap 上下文用作 Spring Boot 创建的实际上下文的父上下文。 属性 查找在其自己的上下文和父上下文中查找属性。

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

我在这里看到的唯一选项(除了创建 bootstrap-bootstrap-上下文)是在 main [=32] 中使用 Spring Cloud Config 客户端=] 并在构建任何 Spring 上下文之前提供 Vault 属性。

也许可以,但它需要 PropertySourceBootstrapConfiguration#initialize() 方法覆盖。您不能禁用 bean PropertySourceBootstrapConfiguration,但您可以通过在 CustomPropertySourceBootstrapConfiguration 中使用 applicationContext.getBeanFactory().getBean(PropertySourceBootstrapConfiguration.class).setPropertySourceLocators(new ArrayList<>()) 来禁用它的初始化方法(以避免过时的外部 属性 源调用)。 在您的 CustomPropertySourceBootstrapConfiguration#initialize 方法中,您可以从配置服务器检索属性,然后通过插入在配置服务器中生成的令牌的 secretId 来自定义您的 vaultPropertySourceLocator。 不要忘记将 CustomPropertySourceBootstrapConfiguration 添加到 spring.factories。

所以,这并不容易,但有可能。

我们使用 EnvironmentPostProcessor 创建了自定义数据源,它将在自动配置 bean 之前被调用 https://docs.spring.io/spring-boot/docs/current/reference/html/howto.html#howto.application.customize-the-environment-or-application-context