我有一个使用spring引导执行器的项目,它从spring配置服务器获取配置。
上周,我将所有的属性yaml移到github上的config repo。所以,目前,我的项目只有 bootstrap{-profile}.yml
在 src/main/resources/
目录。
一切正常,除了 /actuator/info
终结点。我使用“variables”在运行时获取项目名称和版本,由于将此设置移动到config repo,因此它不会解析为实际值,而是将字符串显示为值本身。
引导.yml:
spring:
application:
name: 'foo'
profiles:
active: default
cloud:
config:
uri: http://localhost:8888
foo.yml,在config repo上:
server:
port: 8090
info:
app:
name: "@project.name@"
version: "@project.version@"
eureka:
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://localhost:8761/eureka
management:
endpoints:
web:
exposure:
include: '*'
这是来自 /actuator/info
:
{
"app": {
"name": "@project.name@",
"version": "@project.version@"
}
}
这是预期的React:
{
"app": {
"name": "foo",
"version": "0.0.1"
}
}
我怀疑配置服务器是罪魁祸首,所以我移动了 info.app.*
属性到本地 application.yml
在 src/main/resources/
已经修好了。因此,只有从配置服务器加载配置时才会发生这种情况。
我错过什么了吗?或者这是配置服务器和执行器的已知问题?我做了一些研究,却找不到这个问题的根本原因,甚至找不到和我有同样问题的人。
1条答案
按热度按时间wvyml7n51#
属性,如
@project.name@
以及@project.version@
在构建时由maven或gradle插件解析,而不是在运行时解析。这可以在application.yml
文件在源代码存储库中,但是在构建时不会看到存储在单独repo中供spring cloud config server使用的yml文件。这在spring引导文档中有介绍。