【问题标题】:bootstrap PropertySource ordering引导 PropertySource 排序
【发布时间】:2016-07-21 22:54:01
【问题描述】:

我们有一个Spring-Boot 应用程序,我们在其中使用Eureka 来发现Spring Cloud Config 并检索配置。我们正在集成Vault 以注入安全/敏感信息,并且在加载和解析参数时遇到问题。我们用作 Vault 客户端的项目是 vault-spring-boot-starter,只要我们不通过 eureka 将它与 config-server 一起使用,它就可以很好地工作。

具体来说,Eureka 访问 URL 包含从 Vault 检索的参数/凭据。启用所有组件后,当 DiscoveryClient 尝试访问尚未填充/替换参数的 URL 时,Eureka 请求将失败。

( Example: http://${user}:${pass}..... )

试图指定@Order 和

@AutoConfigureBefore({EurekaClientAutoConfiguration.class, DiscoveryClientConfigServiceAutoConfiguration.class})

在 Vault-spring-boot-starter 的 VaultBootstrapConfiguration 似乎没有任何影响。我相信这个问题与处理 PropertySource 的顺序有关,但我无法在 Eureka 之前成功地注入 Vault 的 PropertySource。我们如何指示自定义/Vault PropertySourceLocator 逻辑在 DiscoveryClient 和配置服务器访问之前执行?

更新

我们使用的是spring-cloud版本的Angel.SR6。

我已按照建议将 @Order(Ordered.HIGHEST_PRECEDENCE) 注释添加到 VaultPropertySourceLocator,但参数解析仍然不起作用。启用 Spring 调试日志记录后,我相信 Vault PropertySource 确实存在,但由于某种原因没有被使用。我已经修改了代码,以便 VaultConfiguration 实现 SmartLifecycle 和 Ordered(order=0 和 phase=Integer.MIN_VALUE),这可能会影响事情。我将不得不进行更多调试以尝试隔离发生的情况。

【问题讨论】:

标签: java spring-boot spring-cloud netflix-eureka


【解决方案1】:

我能够解决我的问题。我尝试了几种不同的方法,包括 Spring AOP 和 LTW,但由于尝试过早地实例化切面,所以没有奏效 - 为了在 Eureka 的 DiscoveryClient 进行调用之前使 VaultPropertySource 可用。

我的工作解决方案包括:

用于在 Eureka bean 之前实例化 Vault bean 并且配置开始实例化:

  • @Ordered 或在 VaultPropertySourceLocator 中实现 PriorityOrdered。我的VaultPropertySourceLocator 还包括实现SmartLifecycle,因为我看到部分Eureka bean 实例化有时发生在Vault bean 之前的不确定性输出。我的订单是Ordered.HIGHEST_PRECEDENCE,相位是Integer.MIN_VALUE

用于将VaultPropertySource 注册为 PropertySource,用于在 Eureka beans/配置连接发生时解析参数:

  • 将环境引用传递给VaultPropertySource,它在环境的PropertySources 列表中自行注册,并且在Eureka beans 实例化并在实例化和解包/解析EurekaClientConfigBean 属性期间设置serviceUrl 属性时存在。

【讨论】:

    猜你喜欢
    • 2019-05-05
    • 2019-07-22
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 2015-06-21
    • 1970-01-01
    相关资源
    最近更新 更多