覆盖 Azure 应用程序配置存储中的属性

Override properties from Azure App Configuration Store

TL;DR

如何让 CLI 上的系统属性或环境变量覆盖 Azure 应用程序配置存储提供的属性?或者这可能根本不可能?

长话短说

让我们假设一个名为 app.prop 的 属性。让我们进一步假设 application.ymlapplication-<profile>.yml 中的以下条目:

app:
    prop: Default

通常,您可以启动 Spring 引导应用程序并提供系统 属性(例如 -Dapp.prop=SYS)或环境变量(例如 export APP_PROP=ENV)后者覆盖 YML 配置文件的值的效果。例如,如果您提供了环境变量,则您的应用程序的 属性 app.prop.

的值为 ENV

从 Azure 应用程序配置存储读取相同的 属性 时,您可以根据需要提供系统 属性 或环境变量。但是该值不再被覆盖;它是存储在 Azure 应用程序配置存储中的值。

一些代码

我正在使用 Spring 启动版本 2.5.7:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.5.7</version>
</parent>

此外,我正在使用以下库访问 Azure 应用程序配置存储:

<properties>
    <azure-spring-cloud.version>2.7.0</azure-spring-cloud.version>
</properties>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.azure.spring</groupId>
            <artifactId>azure-spring-cloud-dependencies</artifactId>
            <version>${azure-spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
        <groupId>com.azure.spring</groupId>
        <artifactId>azure-spring-cloud-appconfiguration-config</artifactId>
    </dependency>
</dependencies>

此外,为了启动应用程序,我提供以下内容 属性:

spring.cloud.azure.appconfiguration.stores[0].connection-string = ...

这一切都很好。在 Azure App Configuration Store 中,我有以下 属性:

app.prop = Azure

如果现在使用以下环境变量 APP_PROP = ENV 启动应用程序,属性 app.prop 的值仍然是 Azure,而不是 ENV .

是否缺少任何设置,以便我可以拥有与没有上述库时相同的行为?

实际上,我搜索了很多,但除了关于 overriding values of remote properties in the Spring Cloud documentation 的一些陈述外,没有找到任何东西,这不是我的情况(我使用的是 Azure App Configuration Store)。

使用 Azure 应用程序配置的全部意义在于将您的配置存储在一个地方并轻松管理它,而无需重新部署/重新启动应用程序。因此我认为这是不可能的。

我建议使用标签根据标签数据加载特定版本的 prop。少数情况:

  1. 如果您仅在本地需要此 属性,请不要在应用程序配置中指定它。
  2. 如果您需要它的多个版本,那么只需创建具有多个标签的相同 属性 并使用您的 spring.profile(或其他 conf-property)来区分版本。
  3. 如果需要加载多个版本,加载多个标签:
    如此处所述:https://docs.microsoft.com/en-us/java/api/overview/azure/spring-cloud-starter-appconfiguration-config-readme?view=azure-java-stable#load-from-multiple-labels

您可以使用此示例查看其工作原理: https://github.com/Azure/azure-sdk-for-java/tree/azure-spring-boot_3.6.0/sdk/appconfiguration/spring-cloud-starter-azure-appconfiguration-config