java - Spring Boot 和 Azure : initialise bean before auto-configuration

标签 java spring spring-boot azure-keyvault azure-app-configuration

尝试设置 Sprint 启动应用程序以从 Azure App Configuration 加载配置,引用 Azure Key Vault包含敏感信息的属性条目。

使用应用程序配置工作正常,但将 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,以及在DemoConfiguration上使用@AutoConfigureBefore(AzureConfigBootstrapConfiguration.class) code> 类,但没有一个替代方案有效。

问题: 您知道如何在初始化AzureConfigBootstrapConfiguration之前创建KeyVaultCredentialProvider bean吗?

最佳答案

如果不知道您的案例中引发的确切异常和堆栈跟踪,则很难给出任何提示。

但是,如果运行时确实缺少配置,则强制执行自己的配置顺序的另一种方法是:

public static void main(String[] args) {
    SpringApplication.run(
       new Class[]{ YourSpringBootApplication.class,
           KeyVaultCredentialProvider.class, 
           AzureConfigBootstrapConfiguration.class // , ...
       }, args);
}

Class 数组包含在应用程序启动时加载的主要源列表。因此此列表不需要包含所有组件和配置。

关于java - Spring Boot 和 Azure : initialise bean before auto-configuration,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60394463/

相关文章:

java - 如何实现 Spring XD 接收器?

java - 为什么当我移动 @SpringBootApplication 时 Spring Autowire 会失败?

java - 专家! Spring Boot 在依赖项目中提到了错误的依赖版本

spring - 内容类型为 application/x-www-form-urlencoded 的 @RequestParam 在 Spring Boot 2.2 中不起作用

java - 如何引用同一个jar中的资源/文件?

Java 和多行批处理文件

java - 如果值不在 ENUM 中,则更改插入值

java - 使用计时器自动关闭 JOptionPane.showconfirmDialog

Spring、Hibernate 事务。加入 A 中创建的线程 B 中的事务。可能吗?

java - 如何从 spring boot thymeleaf 获取输入值到java类?