在Spring Boot 中进行属性 注入工作的充分必要条件是什么?
What are necessary and sufficient conditions for property injection work in Spring Boot?
我有以下 class:
@ConfigurationProperties
public class Database {
...
@Value("${database.driver-class-name}")
public void setDriverClassName(String driverClassName) {
...
}
在build.gradle
中有以下依赖:
dependencies {
compile('org.springframework.boot:spring-boot-starter-jdbc')
compile('org.springframework.boot:spring-boot-configuration-processor')
在application.properties
中有以下行:
database.driver-class-name=com.mysql.jdbc.Driver
在测试中有以下注释class:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(DatabaseTest.Context.class)
@EnableConfigurationProperties
public class DatabaseTest {
@Configuration
public static class Context {
@Bean
public Database database() {
Database ans = new Database();
return ans;
}
}
@Autowired
public Database database;
而且它仍然没有从 属性 文件中注入属性,也没有出现错误消息。
它还想要什么?
从 属性 文件注入属性的充分必要条件是什么?
UDPATE
示例存储库:https://github.com/dims12/MinimalRequrementsToInjectPropertiesFromFile
您的 class 上的 @configurationProperties
应该有 @Bean
或 @Component
注释,以便 spring 注入 属性 值。有关属性的更多信息,请参见 here
@ConfigurationProperties
@Component // or @Bean
public class Database {
抱歉,我自己找到了答案。
在 Spring 引导的情况下,上下文配置 class 通常用 @SpringBootApplication
注释,这会导致很多事情,包括自动查找 属性 文件的连接.这是由 @EnableAutoConfiguration
调用的,它包含在以前的注释中。
在我的例子中,我只用普通的Spring @Configuration
注释注释了上下文配置class,因为我在JUnit
测试中并认为它不是一个应用程序。在这种情况下,我要明确添加 @EnableAutoConfiguration
。
可能我也被允许用@SpringBootApplication
注释上下文配置class,但我没有测试它。
@EnableConfigurationProperties
根本不需要。也不需要 @ConfigurationProperties
和 AutowiredAnnotationBeanPostProcessor
.
我有以下 class:
@ConfigurationProperties
public class Database {
...
@Value("${database.driver-class-name}")
public void setDriverClassName(String driverClassName) {
...
}
在build.gradle
中有以下依赖:
dependencies {
compile('org.springframework.boot:spring-boot-starter-jdbc')
compile('org.springframework.boot:spring-boot-configuration-processor')
在application.properties
中有以下行:
database.driver-class-name=com.mysql.jdbc.Driver
在测试中有以下注释class:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(DatabaseTest.Context.class)
@EnableConfigurationProperties
public class DatabaseTest {
@Configuration
public static class Context {
@Bean
public Database database() {
Database ans = new Database();
return ans;
}
}
@Autowired
public Database database;
而且它仍然没有从 属性 文件中注入属性,也没有出现错误消息。
它还想要什么?
从 属性 文件注入属性的充分必要条件是什么?
UDPATE
示例存储库:https://github.com/dims12/MinimalRequrementsToInjectPropertiesFromFile
您的 class 上的 @configurationProperties
应该有 @Bean
或 @Component
注释,以便 spring 注入 属性 值。有关属性的更多信息,请参见 here
@ConfigurationProperties
@Component // or @Bean
public class Database {
抱歉,我自己找到了答案。
在 Spring 引导的情况下,上下文配置 class 通常用 @SpringBootApplication
注释,这会导致很多事情,包括自动查找 属性 文件的连接.这是由 @EnableAutoConfiguration
调用的,它包含在以前的注释中。
在我的例子中,我只用普通的Spring @Configuration
注释注释了上下文配置class,因为我在JUnit
测试中并认为它不是一个应用程序。在这种情况下,我要明确添加 @EnableAutoConfiguration
。
可能我也被允许用@SpringBootApplication
注释上下文配置class,但我没有测试它。
@EnableConfigurationProperties
根本不需要。也不需要 @ConfigurationProperties
和 AutowiredAnnotationBeanPostProcessor
.