Spring Boot: включение типов аннотированных @ConfigurationProperties

Spring Boot предоставляет инфраструктуру для связывания типов @ConfigurationProperties и регистрации их в виде bean-компонентов. Вы можете включить свойства конфигурации на индивидуальной основе или включить сканирование свойств конфигурации, которое работает аналогично сканированию компонентов.

Иногда классы, помеченные @ConfigurationProperties, могут не подходить для сканирования, например, если вы разрабатываете собственную автоконфигурацию или хотите включить их условно. В этих случаях укажите список типов для обработки с помощью аннотации @EnableConfigurationProperties. Это можно сделать для любого класса @Configuration, как показано в следующем примере:

@Configuration(proxyBeanMethods = false)
@EnableConfigurationProperties(AcmeProperties.class)
public class MyConfiguration {
}

Чтобы использовать сканирование свойств конфигурации, добавьте аннотацию @ConfigurationPropertiesScan в свое приложение. Как правило, она добавляется в основной класс приложения, аннотированный @SpringBootApplication, но ее можно добавить в любой класс @Configuration. По умолчанию сканирование происходит из пакета класса, который объявляет аннотацию. Если вы хотите определить конкретные пакеты для сканирования, вы можете сделать это, как показано в следующем примере:

@SpringBootApplication
@ConfigurationPropertiesScan({ "com.example.app", "org.acme.another" })
public class MyApplication {
}

Когда bean @ConfigurationProperties зарегистрирован с использованием сканирования свойств конфигурации или через @EnableConfigurationProperties, bean имеет условное имя: <prefix>-<fqn>, где <prefix> - префикс ключа среды, указанный в аннотации @ConfigurationProperties и <fqn> это полное имя bean. Если в аннотации не указан префикс, используется только полное имя bean-компонента.

Имя компонента в приведенном выше примере - acme-com.example.AcmeProperties.

Рекомендуется, чтобы @ConfigurationProperties работал только со средой и, в частности, не вставлял другие компоненты из контекста. В крайних случаях может использоваться установка сеттера или любого из *Aware интерфейсов, предоставляемых фреймворком (например, EnvironmentAware, если вам нужен доступ к Environment). Если вы все еще хотите внедрить другие bean-компоненты с помощью конструктора, bean-компонент свойств конфигурации должен быть аннотирован @Component и использовать привязку свойств на основе JavaBean.


Читайте также:


Комментарии

Популярные сообщения из этого блога

Методы класса Object в Java

Как получить текущий timestamp в Java

Основные опции JVM для повышения производительности и отладки