Java 在spring boot中重写配置文件属性

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

在spring boot中,我有以下配置文件: application-email.yaml

在test/resources目录中,我有application.yaml,我希望包含电子邮件配置文件中的所有属性,但对于测试,我希望覆盖
收件人
属性

因此,我希望我的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硬编码。我关心的是我有一个多模块系统。Profile
email
并非在每个模块中都使用,但如果我将收件人:“test email”
移动到test Profile,它将填充到所有模块中,即使是那些不需要的模块property@a3dsfcv所以如果没有使用需要该属性的代码,那么就没有使用该属性,那么有什么害处呢?Spring
环境中有许多从未使用过的属性。
static {
        System.setProperty("recipient", "test-email");
     }