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数组包含在应用程序启动时要加载的主要来源的列表。因此,此列表不需要包含所有组件和配置。
 
                    