J P*_*son 32 java spring spring-boot
Spring Boot文档说明要使用@ConfigurationProperties
注释
您还需要列出要在
@EnableConfigurationProperties
注释中注册的属性类 ,如以下示例所示:
并给出这段代码:
@Configuration
@EnableConfigurationProperties(AcmeProperties.class)
public class MyConfiguration {
}
Run Code Online (Sandbox Code Playgroud)
但是在下一段中说:
即使前面的配置为AcmeProperties创建了一个常规bean,我们也建议
@ConfigurationProperties
只处理环境,特别是不要从上下文中注入其他bean.话虽如此,@EnableConfigurationProperties
注释也会自动应用于您的项目,以便从环境配置任何使用@ConfigurationProperties注释的现有bean
建议不要@ConfigurationProperties
在@EnableConfigurationProperties
注释下列出bean .
那是哪个呢?实验上,我已经看到,如果我用@ConfigurationProperties
它注释一个bean,就会按预期注入属性,而不需要将其列入@EnableConfigurationProperties
,但如果是这种情况,那么为什么列出任何带有@ConfigurationProperties
注释的东西@EnableConfigurationProperties
,如文档中所示?它有什么不同吗?
Ema*_*nda 34
正如M. Deinum所提到的那样@EnableConfigurationProperties
是为了支持@ConfigurationProperties
.如果您查看注释Java Doc,您可以看到:
启用对ConfigurationProperties带注释的bean的支持.ConfigurationProperties bean可以以标准方式注册(例如使用Bean @Bean方法),或者为方便起见,可以直接在此批注上指定.[...]
例如,假设你有一个类,其职责是读取和存储从您的信息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
Run Code Online (Sandbox Code Playgroud)
DataSourcesConfiguration
@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;
}
}
Run Code Online (Sandbox Code Playgroud)
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..
}
}
Run Code Online (Sandbox Code Playgroud)
小智 15
我花了一段时间才找到这篇文章,但想在这里补充一下,以便其他人可以从中受益。
@ConfigurationProperties
-用于将类与外部属性文件绑定。非常强大,必须使用它来将Bean类与配置实体类分开。
@Configuration
-创建配置原型的Spring bean。
@EnableConfigurationProperties
-在配置实体类和Spring配置原型之间创建绑定,以便在服务内注入后可以轻松地检索属性。
如果我们看下面的代码:
@Configuration @EnableConfigurationProperties @ConfigurationProperties(prefix="ar1")
public class ar1Settings { }
@Configuration 告诉Spring将其视为配置类并将其注册为Bean
@EnableConfigurationProperties 告诉Spring将此类视为application.yml/properties值的使用者
@ConfigurationProperties告诉Spring这个类代表什么部分.
我的理解是,如果您不需要指定属性文件的部分,则可以省略@ConfigurationProperties.
归档时间: |
|
查看次数: |
30931 次 |
最近记录: |