Попытка настроить загрузочное приложение Sprint для загрузки конфигураций из Azure Конфигурация приложения со ссылкой на запись Azure Key Vault для свойств с конфиденциальной информацией.
Использование конфигурации приложения работает правильно, и возникают проблемы, когда ссылка на хранилище ключей добавляется в конфигурацию приложения.
Для подключения к хранилищу ключей AzureConfigBootstrapConfiguration
ищет компонент KeyVaultCredentialProvider
, который недоступен при загрузке:
@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);
}
Пытался создать компонент с наивысшим приоритетом, но он не работает:
@Configuration
public class DemoConfiguration {
@Bean
@Order(Ordered.HIGHEST_PRECEDENCE)
public KeyVaultCredentialProvider keyVaultCredentialProvider() {
return uri -> new EnvironmentCredentialBuilder().build();
}
}
Также пытался использовать @Primary
и @Priority
на бобе и @AutoConfigureBefore(AzureConfigBootstrapConfiguration.class)
на DemoConfiguration
классе, но ни одна из альтернатив не работает.
Вопрос: Знаете ли вы, как создать бин KeyVaultCredentialProvider
раньше AzureConfigBootstrapConfiguration
инициализирован?