Spring Boot文档说要使用@ConfigurationProperties
注释
您还需要列出要在
@EnableConfigurationProperties
注释中注册的属性类 ,如以下示例所示:
并给出以下代码:
@Configuration
@EnableConfigurationProperties(AcmeProperties.class)
public class MyConfiguration {
}
但是在下一段中说:
即使前面的配置为AcmeProperty创建了常规bean,我们也建议
@ConfigurationProperties
仅处理环境,尤其不要从上下文中注入其他bean。话虽如此,@EnableConfigurationProperties
注释也会自动应用到您的项目中,以便从环境配置任何使用@ConfigurationProperties注释的现有bean。
建议不必@ConfigurationProperties
在@EnableConfigurationProperties
注释下列出bean 。
那是什么呢?从实验上看,我已经看到,如果用@ConfigurationProperties
它注释一个Bean时,可以按预期注入属性,而无需在中列出它@EnableConfigurationProperties
,但是如果是这种情况,那么为什么要列出任何带有@ConfigurationProperties
注释的东西@EnableConfigurationProperties
,如文档所示?有什么区别吗?
正如M.
Deinum所说的@EnableConfigurationProperties
是为了支持@ConfigurationProperties
。如果查看批注Java
Doc,您将看到:
启用对带有ConfigurationProperty注释的Bean的支持。可以以标准方式(例如,使用Bean
@Bean方法)注册ConfigurationProperties 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
数据源配置
@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..
}
}
问题内容: 已经了解Python是一种解释性语言…但是,当我查看Python源代码时,我看到的是Windows标识为“编译的Python文件”的文件。这些从哪里来? 问题答案: 它们包含字节码,这是Python解释器将源代码编译到的字节码。然后,此代码由Python的虚拟机执行。 Python的文档解释了这样的定义: Python是一种解释型语言,与编译型语言相反,尽管由于字节码编译器的存在,两者
问题内容: 有人可以给MWE 直接在方法上使用注释的方法吗? 我已经看到了无数的关于在类定义中使用它的示例-但还没有方法的示例。 引用文档: 这种添加到一个类定义或 一个方法 @Target(value = {TYPE, METHOD }) 因此,我认为还有一种可能性和预期的用途-但不幸的是,我无法弄清楚。 问题答案: 这里的DataSource类具有属性url,用户名,密码,driverClas
问题内容: 我大致了解这种构造的作用:它创建了SomeType EJB,并将对象注入到另一个EJB中。 现在,我有一个以这样的方式开始的类:(尽管我认为只有的相关,我会给出所有类级别的注释) 什么的就做吗?他们可能会从JNDI获取或创建“ name1” …对象,但是将结果放在哪里?我看不到附近有任何电话,但是代码库很大,所以我对此不太确定。 额外的问题:我想这两个注释只是重复默认值? 更新:目前有
我正在尝试Akka Stream API,我不知道为什么这会抛出java.lang.IllegalArgumentException:[Partition.in]已经在第5行连接 但如果我将validationPartitioner改为用builder包装。添加(…)然后移除。从 一切正常。如果我只是删除. in代码不编译。为什么强制使用构建器,我是否遗漏了什么或者是错误?
问题内容: 我遇到了xdoclet项目,发现它很受欢迎。所以问题来了,既然我们在Java中有注释:xdoclet是旧式的吗? 还是xdoclet有我看不见/了解的东西。 问题答案: 是通过的注释实现。注释可以完成所有(以及更多)可以完成的工作。 然而,一个明显的区别是,是 无创 。也就是说,它不需要您将类导入到自己的代码中。如果您在自己的代码中使用第3方Java注释,那么在没有第3方jar的情况下