gpt4 book ai didi

java - 引导 PropertySource 排序

转载 作者:搜寻专家 更新时间:2023-10-31 20:32:50 25 4
gpt4 key购买 nike

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

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

(示例:http://${user}:${pass}.....)

尝试指定@Order 和

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

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

更新

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

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

最佳答案

我能够解决我的问题。我尝试了几种不同的方法,包括 Spring AOP 和 LTW,它们并没有起到作用,因为我试图过早地实例化这些方面——以便 VaultPropertySource 在 Eureka 的 DiscoveryClient 进行调用之前可用。

我的工作解决方案包括:

为了在 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 bean 实例化时存在并在实例化期间设置 serviceUrl 属性并展开/解析 EurekaClientConfigBean 属性。

关于java - 引导 PropertySource 排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36368085/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com