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

时间:2021-04-16 12:23:42

标签: spring spring-boot spring-cloud spring-boot-actuator spring-cloud-config

我有一个使用 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/ 并修复了它。所以它只在从配置服务器加载配置时发生。

我错过了什么吗?或者这是配置服务器和执行器的已知问题?我做了一些研究,但找不到根本原因,即使是和我有同样问题的人也找不到。

1 个答案:

答案 0 :(得分:0)

@project.name@@project.version@ 之类的属性在构建时由 Maven 或 Gradle 插件解析,而不是在运行时解析。这可以在 application.yml 文件位于源存储库中时完成,但是在构建时将看不到存储在单独存储库中以与 Spring Cloud Config Server 一起使用的 yml 文件。

这在 Spring Boot documentation 中有介绍。

相关问题