【问题标题】:Actuator not resolving variables due to Config Server?由于配置服务器,执行器无法解析变量?
【发布时间】:2021-07-11 11:27:01
【问题描述】:

我有一个使用 Spring Boot Actuator 的项目,它从 Spring Config Server 获取其配置。

上周,我将所有属性 yaml 移至 GitHub 上的 Config Repo。所以,目前,我的项目在src/main/resources/ 目录中只有bootstrap{-profile}.yml

一切正常,除了/actuator/info 端点。我使用“变量”在运行时获取项目名称和版本,并且由于将此设置移动到 Config Repo,它并没有被解析为实际值,而是将字符串显示为值本身。

bootstrap.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@"
  }
}

这是预期的响应:

{
  "app": {
    "name": "foo",
    "version": "0.0.1"
  }
}

我怀疑配置服务器是罪魁祸首,所以我将info.app.* 属性移动到src/main/resources/ 中的本地application.yml 并且它已修复。所以它只发生在从配置服务器加载配置时。

我错过了什么吗?或者这是 Config Server 和 Actuator 的已知问题?我做了一些研究,但找不到根本原因,甚至没有找到与我有同样问题的人。

【问题讨论】:

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


    【解决方案1】:

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

    Spring Boot documentation 对此进行了介绍。

    【讨论】:

    • 有些事情我不知道!我真的认为这是一些特定于执行器的属性扩展功能。非常感谢!另外,我是否应该期望这也适用于 bootstrap.yml 文件?我记得做过这个测试,但没有成功,但也许是我的注意力不集中。
    • 使用 Maven,属性替换由 Maven 资源插件完成,配置由 Spring Boot 应用。默认只修改application*.[yml|yaml|properties]。您可以在pom.xml 中使用您自己的配置覆盖默认行为。有关引导默认值,请参阅 github.com/spring-projects/spring-boot/blob/master/…
    猜你喜欢
    • 2022-10-19
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-05
    • 2016-11-29
    • 2021-10-23
    相关资源
    最近更新 更多