Java 在spring boot中重写配置文件属性
在spring boot中,我有以下配置文件: application-email.yaml 在test/resources目录中,我有application.yaml,我希望包含电子邮件配置文件中的所有属性,但对于测试,我希望覆盖Java 在spring boot中重写配置文件属性,java,spring,spring-boot,Java,Spring,Spring Boot,在spring boot中,我有以下配置文件: application-email.yaml 在test/resources目录中,我有application.yaml,我希望包含电子邮件配置文件中的所有属性,但对于测试,我希望覆盖收件人属性 因此,我希望我的application.yaml如下所示: spring: profiles: include: email services: email: recipient: `test-email` 据我所知,sprin
收件人属性
因此,我希望我的application.yaml如下所示:
spring:
profiles:
include: email
services:
email:
recipient: `test-email`
据我所知,spring首先读取test/resources中的application.yaml,然后用概要文件中的值覆盖它。
但我想要相反的结果
我怎样才能做到这一点
添加1:
我想我可以创建概要测试,在那里定义我的测试接收者。但是,我能在没有附加个人资料的情况下完成吗 最好的方法确实是创建application-test.yaml,并激活概要文件测试
你为什么不想这样做?
这是spring推荐的方法。要获取所有测试属性和电子邮件属性,我需要添加以下注释:
@ActiveProfiles("test")
@PropertySource("classpath:application-email.yaml")
public class MyWonderfulTests { ...}
如果您只想覆盖一个属性,请将以下静态块添加到测试类的顶部:
static {
System.setProperty("recipient", "test-email");
}
这应该可以解决问题:)问题是,我想使用System.setProperty
在Spring Boot应用程序中硬编码属性值,为所有给定此模块的测试重写此属性??绝对不是!!!属性值应该在属性文件中设置,而不是用Java硬编码。我关心的是我有一个多模块系统。Profileemail
并非在每个模块中都使用,但如果我将收件人:“test email”
移动到test Profile,它将填充到所有模块中,即使是那些不需要的模块property@a3dsfcv所以如果没有使用需要该属性的代码,那么就没有使用该属性,那么有什么害处呢?Spring环境中有许多从未使用过的属性。
static {
System.setProperty("recipient", "test-email");
}