转换为新的应用程序配置 Spring Boot 库

现已推出新版 Azure 应用程序配置 Spring Boot 库。 该版本引入了 Spring Cloud Azure 全局属性之类的新功能,但也引入了一些中断性变更。 这些变更与使用以前的库版本的配置设置不向后兼容。

本文提供有关迁移到新库版本所需的更改和操作的参考。

组和项目 ID 已更改

适用于 Spring Boot 的 Azure 库中的所有组和工件 ID 都已更新,以匹配新格式。 新的包名称为:

<dependency>
    <groupId>com.azure.spring</groupId>
    <artifactId>spring-cloud-azure-appconfiguration-config</artifactId>
</dependency>
<dependency>
    <groupId>com.azure.spring</groupId>
    <artifactId>spring-cloud-azure-appconfiguration-config-web</artifactId>
</dependency>
<dependency>
    <groupId>com.azure.spring</groupId>
    <artifactId>spring-cloud-azure-feature-management</artifactId>
</dependency>
<dependency>
    <groupId>com.azure.spring</groupId>
    <artifactId>spring-cloud-azure-feature-management-web</artifactId>
</dependency>

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

4.7.0 版本是库的第一个 4.x 版本。 它与其他 Spring Cloud Azure 库的版本相匹配。

从版本 4.7.0 开始,应用程序配置和功能管理库是 spring-cloud-azure-dependencies 材料清单 (BOM) 的一部分。 BOM 文件确保你不再需要在项目中指定库的版本。 BOM 会自动管理库的版本。


包路径已重命名

spring-cloud-azure-feature-managementspring-cloud-azure-feature-management-web 库的包路径已从 com.azure.spring.cloud.feature.manager 重命名为 com.azure.spring.cloud.feature.managementcom.azure.spring.cloud.feature.management.web

类已重命名

以下类已更改:

  • ConfigurationClientBuilderSetup 已重命名为 ConfigurationClientCustomizer。 它的 setup 类已重命名为 customize
  • SecretClientBuilderSetup 已重命名为 SecretClientCustomizer。 它的 setup 类已重命名为 customize
  • 已删除 AppConfigurationCredentialProviderKeyVaultCredentialProvider。 可以改用 Spring Cloud Azure 通用配置属性,或者使用 ConfigurationClientCustomizerSecretClientCustomizer 修改凭据。

功能标志加载

功能标志现在支持通过多个键/标签筛选器进行加载:

spring.cloud.azure.appconfiguration.stores[0].feature-flags.enable
spring.cloud.azure.appconfiguration.stores[0].feature-flags.selects[0].key-filter
spring.cloud.azure.appconfiguration.stores[0].feature-flags.selects[0].label-filter
spring.cloud.azure.appconfiguration.stores[0].monitoring.feature-flag-refresh-interval

spring.cloud.azure.appconfiguration.stores[0].feature-flags.label 属性已移除。 可以改用 spring.cloud.azure.appconfiguration.stores[0].feature-flags.selects[0].label-filter 来指定标签筛选器。

使用客户端定制器

ConfigurationClientCustomizerSecretClientCustomizer 用于自定义 ConfigurationClientSecretClient 实例。 在使用客户端连接应用配置之前,可以使用它们修改客户端。 这样便可使用 Azure 标识库支持的任何凭据类型。 还可以修改客户端,设置自定义 HttpClientHttpPipeline.

import com.azure.core.credential.TokenCredential;
import com.azure.data.appconfiguration.ConfigurationClientBuilder;
import com.azure.identity.AzureCliCredential;
import com.azure.identity.AzureCliCredentialBuilder;
import com.azure.identity.ChainedTokenCredential;
import com.azure.identity.ChainedTokenCredentialBuilder;
import com.azure.identity.EnvironmentCredentialBuilder;
import com.azure.identity.ManagedIdentityCredential;
import com.azure.identity.ManagedIdentityCredentialBuilder;
import com.azure.spring.cloud.appconfiguration.config.ConfigurationClientCustomizer;

public class ConfigurationClientCustomizerImpl implements ConfigurationClientCustomizer {

    @Override
    public void customize(ConfigurationClientBuilder builder, String endpoint) {
        AzureCliCredential cliCredential = new AzureCliCredentialBuilder().build();
        String managedIdentityClientId = System.getenv("MANAGED_IDENTITY_CLIENT_ID");
        ManagedIdentityCredential managedIdentityCredential = new ManagedIdentityCredentialBuilder()
            .clientId(managedIdentityClientId).build();
        ChainedTokenCredential credential = new ChainedTokenCredentialBuilder().addLast(cliCredential)
            .addLast(managedIdentityCredential).build();
        builder.credential(credential);
    }
}

可能与 Spring Cloud Azure 全局属性相冲突

使用 Spring Cloud Azure 通用配置属性,可以自定义与 Azure 服务的连接。 新的应用程序配置库将选取使用 Spring Cloud Azure 通用配置属性配置的任何全局或应用程序配置设置。 如果已为另一个 Spring Cloud Azure 库设置了配置,则与应用程序配置的连接将发生更改。

可以使用 ConfigurationClientCustomizer/SecretClientCustomizer 修改客户端以替代此行为。

警告

Spring Cloud Azure 全局属性可能会提供多个连接方法,因为它们会自动选取凭据(例如环境变量),并使用它们连接到 Azure 服务。 如果你使用其他连接方法(例如托管标识),而全局属性正在替代此方法,则此行为可能会导致问题。