【发布时间】:2023-02-15 10:11:40
【问题描述】:
我正在按照 Manning 的书 Spring microservices in action 2e 进行配置服务器的实现,我遇到了配置服务器不从默认配置文件读取属性的问题。
我的保管库路径是secret/licensing-service/default,我可以通过此命令读取默认配置文件的保管库配置
curl -X GET -H "X-Vault-Token:myroot" http://127.0.0.1:8200/v1/secret/data/licensing-service/default | jq
但是,当我启用调试日志记录并发出请求时:
curl -X "GET" "http://localhost:8071/licensing-service/default" -H "X-Config-Token: myroot" | jq
{
"name": "licensing-service",
"profiles": [
"default"
],
"label": null,
"version": null,
"state": null,
"propertySources": []
}
我看到 spring 尝试发出以下 HTTP 请求:
2022-11-13 15:41:41.272 DEBUG 92277 --- [nio-8071-exec-9] o.s.web.client.RestTemplate
: HTTP GET http://127.0.0.1:8200/v1/secret/data/licensing-service
2022-11-13 15:41:42.100 DEBUG 92277 --- [nio-8071-exec-9] o.s.web.client.RestTemplate
: HTTP GET http://127.0.0.1:8200/v1/secret/data/application
可以看出它从 URL 中删除了一个默认关键字,我发现它在以下类中这样做 - https://github.com/spring-cloud/spring-cloud-config/blob/main/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/AbstractVaultEnvironmentRepository.java 特别是这里:
private List<String> scrubProfiles(String[] profiles) {
List<String> scrubbedProfiles = new ArrayList<>(Arrays.asList(profiles));
scrubbedProfiles.remove("default");
return scrubbedProfiles;
}
我做错了什么以及如何让它从默认配置文件中读取数据?上面描述的所有内容都适用于 vault path secret/licensing-service/dev 的开发配置文件
这是我的配置服务器的配置:
spring:
application:
name: config-server
profiles:
active: vault
cloud:
config:
server:
vault:
port: 8200
host: 127.0.0.1
kv-version: 2
profile-separator: /
server:
port: 8071
【问题讨论】:
标签: java spring-cloud spring-cloud-config spring-cloud-vault-config