0

我在使用时对占位符解析优先级有疑问consul-config,我使用信息vault-config 创建了简单的应用程序

我的依赖是:

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.

我以不同的组合做了几次,似乎保险库配置比 consul 具有更高的优先级。

我的问题是在哪里可以找到有关解决策略的信息。(想象一下我们添加为第三个zookeeper-config)。似乎 spring-core 文档对此保持沉默。

4

1 回答 1

0

根据我通过调试Spring源代码的理解......现在Vault具有优先权。

我的调查结果: PropertySourceBootstrapConfiguration.java负责在引导阶段初始化所有属性源。在定位属性之前,它会按顺序对所有 propertySourceLocators 进行排序:

AnnotationAwareOrderComparator.sort(this.propertySourceLocators);

Vault 总是“获胜”,因为LeasingVaultPropertySourceLocator的实例(至少这个是在我的调试过程中创建的)实现了PriorityOrdered接口。ConsulPropertySourceLocator的实例具有@Order(0)注释。根据OrderComparator: PriorityOrdered 的实例“更重要”。

如果您有另一个 PriorityOrdered 属性源(例如自定义属性源),您可以通过设置spring.cloud.vault.config.orderVault 来影响此顺序。

目前没有自定义,我不知道如何更改 Vault 和 Consul 之间的优先级。

于 2018-09-08T22:05:49.900 回答