spring-boot - application.properties 不使用@EnableAutoConfiguration 和自定义spring boot starter 读取
问题描述
我尝试创建一个简单的自定义弹簧启动启动器,它读取以下属性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 都是基于属性的。
谢谢
解决方案
@EnableAutoConfiguration
在测试类上没有为您准备所需的测试上下文。
而@SpringBootTest
根据默认规范为您设置默认测试上下文,例如从根包扫描,从默认资源加载。要从不属于根包层次结构的自定义包加载,即使在测试上下文配置中也可以从自定义资源目录加载。您的所有配置都将根据@EnableAutoConfiguration
您的定义在您的实际启动项目中自动完成。
推荐阅读
- python - 正则表达式查找未跟随某些字符的数字
- apache-spark - 为每晚运行批处理调度 Spark - 像 ETL 一样运行每晚
- javascript - 为 null 的对象返回 null 而不是错误
- python-3.x - python 3.7导入请求的语法错误
- css - 使用 flex 创建间隙
- linux - 如何将 Windows 身份从 Angular 应用程序传递到 Linux 服务器上托管的 asp.net core 2.0 webapi
- r - 在父对象(即列表)中调用函数
- python - 查找和替换字符串中的混淆词或短语
- git - 拆分最后一次提交并修改中间提交,同时在每一步更新工作目录
- c# - 如何修复 C# Windows 应用程序中的“名称...在当前上下文中不存在错误”?