我们有一个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})
似乎没有任何影响。我认为这个问题与处理PropertySources的顺序有关,但是我无法在Eureka之前成功注入Vault的PropertySource。如何在DiscoveryClient和配置服务器访问之前指示自定义/ Vault PropertySourceLocator逻辑执行?
更新
我们正在使用spring-cloud版本Angel.SR6。
我已按照建议将 @Order(Ordered.HIGHEST_PRECEDENCE)注释添加到VaultPropertySourceLocator,但参数解析仍然无法正常工作。启用Spring调试日志记录后,我认为Vault PropertySource实际上存在,但由于某些原因未被使用。我修改了代码,以便VaultConfiguration实现可能影响事物的SmartLifecycle和Ordered(order = 0和phase = Integer.MIN_VALUE)。我将不得不做更多的调试,试图找出正在发生的事情。
答案 0 :(得分:1)
我能够解决我的问题。我尝试了几种不同的方法,包括Spring AOP和LTW,它们并没有像过早尝试实例化这些方面那样工作 - 为了让VaultPropertySource在Eureka的DiscoveryClient之前可以拨打电话。
我的工作解决方案包括:
为了在Eureka bean之前实例化Vault bean并且配置开始实例化:
@Ordered
或在PriorityOrdered
中实施VaultPropertySourceLocator
。我的VaultPropertySourceLocator
还包括实现SmartLifecycle
,因为我看到非确定性输出,部分Eureka bean实例化有时发生在Vault bean之前。我的订单为Ordered.HIGHEST_PRECEDENCE
,阶段为Integer.MIN_VALUE
。将VaultPropertySource
注册为PropertySource,用于在Eureka bean /配置布线时解析参数:
VaultPropertySource
,它在环境的PropertySources列表中自我注册,并且在Eureka bean实例化并在实例化和展开期间设置serviceUrl
属性时存在/解析EurekaClientConfigBean
属性。