引导 PropertySource 排序
Posted
技术标签:
【中文标题】引导 PropertySource 排序【英文标题】:bootstrap PropertySource ordering 【发布时间】: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),这可能会影响事情。我将不得不进行更多调试以尝试隔离发生的情况。
【问题讨论】:
你用的是什么版本的spring cloud? 查看代码,您可能需要@Order
上的github.com/markramach/vault-spring-boot-starter/blob/master/src/…
也就是说PropertySourceLocator
s 支持弹簧排序机制。
啊,订购可能只有 Brixton,不是天使。
是否有针对 Angel.SR6 的订购解决方法?
【参考方案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
属性时存在。
【讨论】:
以上是关于引导 PropertySource 排序的主要内容,如果未能解决你的问题,请参考以下文章
Spring:使用@Configuration 注释自动装配或“普通”调用?
spring使用@Value标签读取.properties文件的中文乱码问题的解决