我有一个spring启动应用程序,它有源代码和测试层次结构。在这两个层次结构中,我都有带属性的application.yml文件。
假设我在src application.yml中有以下内容:
settings1:
setting1: value11
settings2
setting1: value12
在测试中的application.yml中,我得到了以下内容:
settings1:
setting1:testValue11
我希望我的所有测试都知道来自测试application.yml的重写值,如果测试application.yml中不存在某个值,则将从src application.yml中提取该值。
但我希望当我的应用程序运行时,它只知道来自src application.yml的设置。
我该怎么解决它呢?配置会更好,而不是在代码中连接值。
发布于 2020-03-06 21:35:41
请参考Spring Boot参考文档中的2.7.3. Multi-profile YAML Documents部分。
下面是一个包含单个application.yml文件的示例。
settings1:
setting1: 192.168.1.100
settings2:
setting1: 192.168.1.101
---
spring:
profiles: test
settings1:
setting1: 192.168.1.102
以及如下所示的测试用例
@SpringBootTest
@ActiveProfiles("test")
class ApplicationTest {
@Value("${settings1.setting1}")
String setting1;
@Value("${settings2.setting1}")
String setting2;
@Test
void test() {
System.out.println(setting1);
System.out.println(setting2);
}
}
测试用例将打印出来
192.168.1.102
192.168.1.101
编辑
对于单独/多个yml文件,
除了application.yml
之外,还有一个单独的application-<profile>.yml
(这里是application-test.yml
)来定义特定于概要文件的属性。特定于配置文件的配置将优先于该配置文件为活动的配置文件。
例如,定义application-test.yml
settings1:
setting1: 192.168.1.102
https://stackoverflow.com/questions/60564417
复制相似问题