0

我有多个服务共享同一个配置服务器,其中配置服务器从 Vault 中提取我想要为某些服务启用 spring.datasource.hikari.register-mbeans 的东西,所以我使用Property Overrides让服务(配置客户端)提供此属性的值,默认情况下该属性为 false,以防服务没有该属性。即使服务提供了它自己的属性值,它总是返回默认值的问题是这种情况下是错误的,它完全忽略了来自服务的那个,有什么建议吗?

    application:
    name: my-config-server
  profiles:
    active: vault
  cloud:
    config:
      server:
        overrides:
          spring.datasource.hikari.register-mbeans: ${app.spring.datasource.hikari.register-mbeans:false}
          spring.boot.admin.client.password: ${app.spring.boot.admin.client.password:defaultAdminPassword}
        vault:
          port: 8200
          host: 127.0.0.1
          kv-version: 2
4

1 回答 1

0

替代解决方案

我认为您可以使用该overrideNone属性:

您可以通过设置 spring.cloud.config.overrideNone=true 标志(默认为 false)将客户端中所有覆盖的优先级更改为更像默认值,让应用程序在环境变量或系统属性中提供自己的值在远程存储库中。

如果你这样做,你的属性可以只是默认值:

spring:
  cloud:
    config:
      server:
        overrides:
          spring.datasource.hikari.register-mbeans: false
          spring.boot.admin.client.password: defaultAdminPassword

解决方案

您需要将值括在引号中以阻止占位符解析。现在,您的配置服务器在加载时将属性设置为 false ,因为它无法解析本地属性app.spring.datasource.hikari.register-mbeans,因此默认为false. 通过包含引号,该属性被设置为字面意思${app.spring.datasource.hikari.register-mbeans:false}

在 yaml 文件中:

spring:
  cloud:
    config:
      server:
        overrides:
          spring.datasource.hikari.register-mbeans: "${app.spring.datasource.hikari.register-mbeans:false}"
          spring.boot.admin.client.password: "${app.spring.boot.admin.client.password:defaultAdminPassword}"
于 2020-07-07T16:26:15.663 回答