我尝试创建一个简单的自定义弹簧启动启动器,它读取以下属性application.properties
:
@EnableConfigurationProperties({ CustomStarterProperties.class })
@Configuration
public class CustomStarterAutoConfiguration {
@Autowired
private CustomStarterProperties properties;
@Bean
public String customStarterMessage() {
return properties.getMessage();
}
}
及其ConfigurationProperties :
@ConfigurationProperties(prefix = "custom.starter")
public class CustomStarterProperties {
private String message;
/* getter and setter */
...
}
还有相应的application.properties
andMETA-INF/spring.factories
来启用autoconfiguration
。
我有另一个项目将此启动器声明为依赖项,并在其中编写了一个测试以查看是否创建了 customStarterMessage Bean:
@RunWith(SpringRunner.class)
@EnableAutoConfiguration
public class TotoTest {
@Autowired
String customStarterMessage;
@Test
public void loadContext() {
assertThat(customStarterMessage).isNotNull();
}
}
该测试失败(即使项目中有适当的 application.properties 文件),因为application.properties
似乎没有被读取。
它适用于@SpringBootTest
注释而不是注释,@EnableAutoConfiguration
但我想了解为什么 EnableAutoConfiguration 不使用我的 application.properties 文件,而据我了解,所有 Spring AutoConfiguration 都是基于属性的。
谢谢