在使用consul-config
和vault-config
时,我对占位符解析优先级有疑问
我使用this信息创建了简单的应用程序
我的依赖项是:
dependencies {
compile('org.springframework.cloud:spring-cloud-starter-consul-config')
compile('org.springframework.cloud:spring-cloud-starter-vault-config')
compile('org.springframework.boot:spring-boot-starter-webflux')
compile('org.springframework.cloud:spring-cloud-starter')
testCompile('org.springframework.boot:spring-boot-starter-test')
}
请注意,我没有使用服务发现。
下一步,我创建了属性foo.prop = consul
(在领事存储中)
和foo.prop = vault
。
使用时:
@Value("${foo.prop}")
private String prop;
我得到vault
作为输出,但是当我从库中删除foo.prop
并重新启动应用程序时,我将得到consul
。
我以不同的组合进行了几次,看来Vault配置的优先级高于领事。
我的问题是我在哪里可以找到有关解决策略的信息。(想象一下,我们作为第三个zookeeper-config
添加了)。似乎Spring核心文档对此保持沉默。
答案 0 :(得分:0)
根据我对调试Spring源代码的了解,... Vault现在具有优先级。
我的调查结果: PropertySourceBootstrapConfiguration.java负责在引导阶段初始化所有属性源。在查找属性之前,它会按顺序对所有propertySourceLocators进行排序:
AnnotationAwareOrderComparator.sort(this.propertySourceLocators);
保险柜总是“赢”,因为LeasingVaultPropertySourceLocator的实例(至少是我在调试期间创建的)实例实现了PriorityOrdered
接口。 ConsulPropertySourceLocator的实例具有@Order(0)
注释。根据{{3}}表示:PriorityOrdered的实例“更重要”。
如果您还有另一个PriorityOrdered属性源(例如自定义属性),则可以通过为保险柜设置spring.cloud.vault.config.order
来影响此顺序。
就目前而言,未经自定义,我不知道如何在Vault和Consul之间更改优先级。