Spring Boot和Azure:在自动配置之前初始化bean
来源:爱站网时间:2021-09-16编辑:网友分享
[尝试设置Sprint引导应用程序以从Azure应用配置中加载配置,并参考具有敏感信息的属性的Azure Key Vault条目。使用App ...
问题描述
[尝试设置Sprint引导应用程序以从Azure App Configuration加载配置,并参考具有敏感信息的属性的Azure Key Vault条目。
使用“应用程序配置”正常工作,并且将“密钥保管库”参考添加到“应用程序配置”中时出现问题。
为了连接到Key Vault,AzureConfigBootstrapConfiguration
寻找一个KeyVaultCredentialProvider
bean,该bean在加载时不可用:
@Bean
public AzureConfigPropertySourceLocator sourceLocator(AzureCloudConfigProperties properties,
AppConfigProviderProperties appProperties, ClientStore clients, ApplicationContext context) {
KeyVaultCredentialProvider keyVaultCredentialProvider = null;
try {
keyVaultCredentialProvider = context.getBean(KeyVaultCredentialProvider.class);
} catch (NoUniqueBeanDefinitionException e) {
LOGGER.error("Failed to find unique TokenCredentialProvider Bean for authentication.", e);
if (properties.isFailFast()) {
throw e;
}
} catch (NoSuchBeanDefinitionException e) {
LOGGER.info("No TokenCredentialProvider found.");
}
return new AzureConfigPropertySourceLocator(properties, appProperties, clients, keyVaultCredentialProvider);
}
试图创建具有最高优先级的bean,但是它不起作用:
@Configuration
public class DemoConfiguration {
@Bean
@Order(Ordered.HIGHEST_PRECEDENCE)
public KeyVaultCredentialProvider keyVaultCredentialProvider() {
return uri -> new EnvironmentCredentialBuilder().build();
}
}
[也尝试在bean上使用@Primary
和@Priority
,在@AutoConfigureBefore(AzureConfigBootstrapConfiguration.class)
类上使用DemoConfiguration
,但所有替代方法均无效。
问题:您知道在初始化KeyVaultCredentialProvider
之前如何创建AzureConfigBootstrapConfiguration
bean吗?
思路:
很难给出任何提示,而又不知道确切的异常以及在您的情况下抛出的堆栈跟踪。
但是如果在运行时确实缺少配置,则另一种强制执行自己的配置顺序的方法是:
public static void main(String[] args) {
SpringApplication.run(
new Class[]{ YourSpringBootApplication.class,
KeyVaultCredentialProvider.class,
AzureConfigBootstrapConfiguration.class // , ...
}, args);
}
Class
数组包含在应用程序启动时要加载的主要来源的列表。因此,此列表不需要包含所有组件和配置。