如何解决由于配置服务器,执行器无法解析变量?
我有一个使用 Spring Boot Actuator 的项目,它从 Spring Config Server 获取其配置。
上周我拿走了所有的 yaml 属性并将它们移到了 GitHub 上的 Config Repo。因此,目前,我的项目在 bootstrap{-profile}.yml
目录中只有 src/main/resources/
。
一切正常,除了 /actuator/info
端点。我使用“变量”在运行时获取项目名称和版本,并且由于将此设置移至 Config Repo,因此不会解析为实际值,而是将字符串显示为值本身。
bootstrap.yml:
spring:
application:
name: 'foo'
profiles:
active: default
cloud:
config:
uri: http://localhost:8888
foo.yml,在配置仓库上:
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@"
}
}
这是预期的响应:
{
"app": {
"name": "foo","version": "0.0.1"
}
}
我怀疑 Config Server 是罪魁祸首,所以我将 info.app.*
属性移动到 application.yml
中的本地 src/main/resources/
并修复了它。所以它只在从配置服务器加载配置时发生。
我错过了什么吗?或者这是配置服务器和执行器的已知问题?我做了一些研究,但找不到根本原因,即使是和我有同样问题的人也找不到。
解决方法
@project.name@
和 @project.version@
之类的属性在构建时由 Maven 或 Gradle 插件解析,而不是在运行时解析。这可以在 application.yml
文件位于源存储库中时完成,但是在构建时将看不到存储在单独存储库中以与 Spring Cloud Config Server 一起使用的 yml 文件。
这在 Spring Boot documentation 中有介绍。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。