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 初始化的 PropertySource
s。然后 bootstrap 上下文用作 Spring Boot 创建的实际上下文的父上下文。 属性 查找在其自己的上下文和父上下文中查找属性。
配置属性在启动过程中很早就被初始化,它们使用当前 Environment
中的属性。在初始化 ConfigurationProperties
个 bean 时,Environment
还不包含任何远程 PropertySource
s。
我在这里看到的唯一选项(除了创建 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
我们正在利用 Spring Cloud Config 和 Spring Cloud Config Vault。我们想知道是否有办法 "bootstrap the bootstrap",即我们希望 spring 云配置服务器被命中,然后从中提取属性以利用我们的保险库配置。我们查看了顺序,但它似乎不起作用,我认为这是因为 post 处理顺序,但我希望我可能遗漏了一些东西。
TL;DR
没用。
说明
Spring Cloud 使用其 bootstrap 上下文所做的是设置一个应用程序上下文,其中包含一组从 Spring beans 初始化的 PropertySource
s。然后 bootstrap 上下文用作 Spring Boot 创建的实际上下文的父上下文。 属性 查找在其自己的上下文和父上下文中查找属性。
配置属性在启动过程中很早就被初始化,它们使用当前 Environment
中的属性。在初始化 ConfigurationProperties
个 bean 时,Environment
还不包含任何远程 PropertySource
s。
我在这里看到的唯一选项(除了创建 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