Spring 配置服务器 - 属性覆盖



>我有多个服务共享同一个配置服务器,其中配置服务器从 Vault 中提取我想为某些服务启用 spring.datasource.hikari.register-mbeans 的东西,所以我使用属性覆盖让服务(配置客户端(提供此属性的值,默认情况下,如果服务没有属性,该属性为 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

替代解决方案

我认为您可以使用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}"