我设置了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: {}
型
不知道是什么问题,我检查了版本兼容性,他们应该是兼容的。任何想法?
2条答案
按热度按时间wmomyfyw1#
对于版本兼容性,最好检查spring Boot /spring cloud和azure 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
文件中得到一个类似的代码片段:字符串
其中版本变量取决于您的设置和上面提到的矩阵
a8jjtwal2#
我可以通过查看这个类来解决这个问题-
字符串
有一个**@ConditionOnAnyProperty注解,它检查application.yml中是否存在
"spring.cloud.azure.keyvault.secret.endpoint"
所以很明显property-sources[0]对于这个版本来说是不必要的,这很奇怪,因为它包含在Azure的每个教程和文档中,并且版本4.12.0**目前是spring-boot 3.0.0以下的最新版本之一
无论如何-我可能已经想到了更早地研究类,自动配置这一点,但至少现在它的工作正常,也许它会帮助别人解决类似的问题更快。