java secretClient的azure-spring-boot-starter-keyvault-secrets自动配置不适用于spring-boot 2.7.17

xzabzqsa  于 2023-11-15  发布在  Java
关注(0)|答案(2)|浏览(129)

我设置了spring-boot和AKV之间的连接,当显式添加@Bean SecretClient时,一切都很好。我已经查看了各种代码示例,对于azure-spring-boot-starter-keyvault-secrets,这应该会自动工作,不需要设置@Bean。
这是我使用的spring-boot和spring-cloud-azure版本

<spring.boot.version>2.7.17</spring.boot.version>
<spring-cloud-azure.version>4.12.0</spring-cloud-azure.version>

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

<dependency>
    <groupId>com.azure.spring</groupId>
    <artifactId>spring-cloud-azure-starter-keyvault</artifactId>
</dependency>

字符串
这是我的application.yml配置

spring:
  cloud:
    azure:
      keyvault:
        secret:
          property-sources[0]:
            endpoint: ${ENDPOINT_URL}
            credential:
              client-secret: ${AZURE_CLIENT_SECRET}
              client-id: ${AZURE_CLIENT_ID}
            profile:
              tenant-id: ${AZURE_TENANT_ID}


如果我从配置中删除@Bean

@Bean
public SecretClient secretClient() {
    return new SecretClientBuilder()
            .vaultUrl("akv-url")
            .credential(new DefaultAzureCredentialBuilder().build())
            .buildClient();
}


我看到 Spring Bean 例外:

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.azure.security.keyvault.secrets.SecretClient' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}


不知道是什么问题,我检查了版本兼容性,他们应该是兼容的。任何想法?

wmomyfyw

wmomyfyw1#

对于版本兼容性,最好检查spring Boot /spring cloudazure sdk bom版本矩阵
Sping Boot /cloud矩阵可在此处找到https://spring.io/projects/spring-cloud
适用于azure bom https://github.com/Azure/azure-sdk-for-java/wiki/Spring-Versions-Mapping
你应该在pom.xml文件中得到一个类似的代码片段:

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

字符串
其中版本变量取决于您的设置和上面提到的矩阵

a8jjtwal

a8jjtwal2#

我可以通过查看这个类来解决这个问题-

com.azure.spring.cloud.autoconfigure.keyvault.secrets.AzureKeyVaultSecretAutoConfiguration

字符串
有一个**@ConditionOnAnyProperty注解,它检查application.yml中是否存在"spring.cloud.azure.keyvault.secret.endpoint"
所以很明显
property-sources[0]对于这个版本来说是不必要的,这很奇怪,因为它包含在Azure的每个教程和文档中,并且版本4.12.0**目前是spring-boot 3.0.0以下的最新版本之一
无论如何-我可能已经想到了更早地研究类,自动配置这一点,但至少现在它的工作正常,也许它会帮助别人解决类似的问题更快。

相关问题