执行器由于配置服务器而无法解析变量?

1u4esq0p  于 2021-07-14  发布在  Java
关注(0)|答案(1)|浏览(391)

我有一个使用spring引导执行器的项目,它从spring配置服务器获取配置。
上周,我将所有的属性yaml移到github上的config repo。所以,目前,我的项目只有 bootstrap{-profile}.ymlsrc/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.ymlsrc/main/resources/ 已经修好了。因此,只有从配置服务器加载配置时才会发生这种情况。
我错过什么了吗?或者这是配置服务器和执行器的已知问题?我做了一些研究,却找不到这个问题的根本原因,甚至找不到和我有同样问题的人。

wvyml7n5

wvyml7n51#

属性,如 @project.name@ 以及 @project.version@ 在构建时由maven或gradle插件解析,而不是在运行时解析。这可以在 application.yml 文件在源代码存储库中,但是在构建时不会看到存储在单独repo中供spring cloud config server使用的yml文件。
这在spring引导文档中有介绍。

相关问题