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

上一篇:如何在运行时更新bash脚本或轻松地重新启动它?

下一篇:无法生成DataBindingClass(Impl确实会生成)

您可能感兴趣的文章

相关阅读

热门软件源码

最新软件源码下载