spring - 未从 application-dev.properties 传递到组件的值
问题描述
我在 Junit 中编写测试并且正在使用 Spring Boot Framework(我是新手)并且需要使用不同的 url 来测试不同的环境因此,除了 application.properties 之外,我还创建了 2 个资源文件
1> application-dev.properties
2> application-stage.properties
我创建了一个组件,我设置了要读取的属性值。
最后在我的测试文件中,我用以下方式注释测试类:
@ContextConfiguration(classes = {ComponentName.class})
同样在我的 application.properties 我有这一行:
spring.profiles.active=dev
预期:当我打印出 Component 类的属性值时,它应该从 application-dev.properties 中获取值
实际:值为null,虽然我的bean创建成功
为什么属性没有从 application-dev.properties 中注入值?
我已经尝试了 Baeldung 的几篇文章(虽然有点令人困惑,这些文章演示了多种方法来做同样的事情,但没有展示一种完整的技术来完成所有端到端的事情 https://www.baeldung.com/弹簧型材
我还尝试了多种方式设置活动配置文件:
一个。环境变量 b. 使用
@ActiveProfiles
注释
注意:这是一个测试项目(我正在尝试自动测试一个网站,所以我所有的资源文件都在 src.test.resources
应用程序属性
#spring
https://ops.dev.website.us
spring.profiles.active=dev
url.sms=https://ops.default.website.us
应用程序-dev.properties
url.sms=https://ops.dev.website.us
应用程序-stage.properties
url.sms=https://ops.stage.website.us
组件文件
@Component
@ConfigurationProperties(prefix = "url")
public class DevEnvironment {
private String sms;
public String getSms() {
return sms;
}
public void setSms(String sms) {
this.sms = sms;
}
}
测试文件
@EnableAutoConfiguration(exclude = {MongoAutoConfiguration.class, MongoDataAutoConfiguration.class})
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = {DevEnvironment.class})
public class MyTest implements ApplicationContextAware {
@Autowired
private ConfigurableEnvironment env;
private DevEnvironment devEnvironment;
String url;
@Override
public void setApplicationContext(ApplicationContext context) throws BeansException {
System.out.println("Active profiles:" + env.getActiveProfiles()[0]);
devEnvironment = context.getBean(DevEnvironment.class);
//System.out.println("from set app context:" + devEnvironment.getSms());
url = devEnvironment.getSms();
}
@Test
public void testSms(){
System.out.println("inside test url:" +url);
}
}
预期:当我打印出 Component 类的属性值时,它应该从 application-dev.properties 中获取值
实际:值为null,虽然我的bean创建成功
解决方案
您忘记了@SpringBootTest
对 MyTest 类的注释。
@EnableAutoConfiguration(exclude = {MongoAutoConfiguration.class, MongoDataAutoConfiguration.class})
@RunWith(SpringRunner.class)
@SpringBootTest //add
@ContextConfiguration(classes = {DevEnvironment.class})
public class MyTest implements ApplicationContextAware {
//
}
我在这方面做得很好。
推荐阅读
- c - 使用 fgets 将数据读入未初始化的 char 指针变量在第二次读取时崩溃
- node.js - 将对象添加到现有 JSON 文件
- javascript - 为什么第二次操作比第一次快?
- javascript - 带有转到 url 按钮的相关下拉列表
- javascript - Javascript Promise.all - 如何获得价值?
- java - 如何使用 Hibernate 搜索来搜索多个字段?
- android - 我需要在 recyclerview 中为每个项目实现我自己的 res/raw 文件中的音频
- google-analytics - 在 Google Analytics 中删除某些 UserId 的历史浏览量
- cv2 - 查看来自 IP 摄像机的图像
- java - 如何从 Intellij IDEA 创建可执行 jar 文件?