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..
}
}