Получить свойства конфигурации в ImportBeanDefinitionRegistrar - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть @ConfigurationProperties POJO.Я хочу иметь доступ к этому внутри ImportBeanDefinitionRegistrar

@ConfigurationProperties("com.some.prefix")
public class VersionProperties {

    private List<String> someList;

    private String someString;
}

У меня есть файл yaml со следующими свойствами

com.some.prefix:
some-string: test
some-list:
  - v1
  - v3

У меня есть класс AutoConfiguration, который выглядит следующим образом:

@Configuration
@EnableConfigurationProperties(SomeProperties.class)
@Import(SomeImportBeanDefinitionRegistrar.class)
public class SomeAutoConfiguration {

}

В этом выпуске Github говорится, что создание регистратора BeanFactoryAware позволило бы получить доступ к компоненту свойств конфигурации.

Я сделал это, но я решил проблемуя имею в том, что внутри моего регистратора все поля bean свойства конфигурации являются нулевыми.

@Override
public void registerBeanDefinitions(
        AnnotationMetadata importingClassMetadata,
        BeanDefinitionRegistry registry
) {
    var props = beanFactory.getBean(SomeProperties.class);
    // all of props fields are null here
}

Ответы [ 2 ]

0 голосов
/ 24 сентября 2019

Проблема заключалась в том, что ImportBeanDefinitionRegistrar происходит слишком рано в жизненном цикле для заполнения ConfigurationProperties. Поэтому мне пришлось сделать моего регистратора EnvironmentAware, а затем использовать API Binder для заполненияConfigurationProperties POJO.

var props = Binder.get(environment)
            .bind("com.some.prefix", SomeProperties.class)
            .orElse(null);
0 голосов
/ 24 сентября 2019

Вы можете получить бин из srping ApplicationContext или с помощью @Bean для инъекции.

@Configuration
@EnableConfigurationProperties(SomeProperties.class)
@Import(SomeImportBeanDefinitionRegistrar.class)
public class SomeAutoConfiguration {
    @Bean
    public void XXXX(SomeProperties someProperties) {
        //you can get SomeProperties props here
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...