EnableConfigurationproperties

EnableConfigurationproperties

The Spring Boot documentation表示要使用@ConfigurationProperties批注



并给出以下代码:

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

但在下一段中说:



建议不需要在@ConfigurationProperties注释下列出@EnableConfigurationProperties bean。

那是什么呢?从实验上看,我已经看到,如果我用@ConfigurationProperties注释一个bean,它将按预期注入(inject)属性,而无需在@EnableConfigurationProperties中列出它,但是如果是这种情况,那么为什么要在@ConfigurationProperties下列出任何带有@EnableConfigurationProperties注释的东西,就像这样显示在文档中?有什么区别吗?

最佳答案

正如M. Deinum所说的@EnableConfigurationProperties是为了支持@ConfigurationProperties。如果查看批注Java Doc,您将看到:



例如,假设您有一个类,该类的职责是从application.yml/application.properties中读取和存储与不同数据库建立连接所需的信息。您可以使用@ConfigurationProperties对其进行注释。

然后,通常会有一个带有@Configuration注释的类,该类为您的应用程序提供DataSource @Bean。您可以使用@EnableConfigurationProperties将其链接到@ConfigurationProperties类,并相应地初始化数据源。

这是一个小例子:

application.yml

data-sources:
  db1:
    url: "jdbc:postgresql://localhost:5432}/db1"
    username: test
    password: test
  db2:
    url: "jdbc:postgresql://localhost:5432}/db2"
    username: test
    password: test

数据源配置
@ConfigurationProperties
public class DataSourcesConfiguration {

    private Map<String, BasicDataSource> dataSources;

    public void setDataSources(Map<String, BasicDataSource> dataSources) {
        this.dataSources = dataSources;
    }

    Map<String, BasicDataSource > getDataSources() {
        return dataSources;
    }
}

DataSourceConnectionConfiguration
@Configuration
@EnableConfigurationProperties(DataSourcesConfiguration.class)
public class DatabaseConnectionConfiguration implements Provider<Connection> {

    private DataSourcesConfiguration dataSourcesConfiguration;

    public DatabaseConnectionConfiguration(DataSourcesConfiguration dataSourcesConfiguration) {
        this.dataSourcesConfiguration = dataSourcesConfiguration;
    }

    @Bean
    public DataSource dataSource() {
        // Use dataSourcesConfiguration to create application data source. E.g., a AbstractRoutingDataSource..
    }

}

07-26 02:53