Java 防止spring中的属性继承

Java 防止spring中的属性继承,java,spring,spring-boot,configuration-files,Java,Spring,Spring Boot,Configuration Files,我有几个配置文件,如: 应用程序.yaml spring: profiles: active: default application.someprop: common spring: profiles: active: prod application.someprop: prod application-prod.yaml spring: profiles: active: default applicatio

我有几个配置文件,如:

应用程序.yaml

spring:
    profiles:
        active: default

application.someprop: common
spring:
    profiles:
        active: prod

application.someprop: prod
application-prod.yaml

spring:
    profiles:
        active: default

application.someprop: common
spring:
    profiles:
        active: prod

application.someprop: prod
我为这个属性设置了一个配置类,并对其进行了验证,如:

@Validated
@ConfigurationProperties(prefix = "application")
public class ApplicationProps {
    @NotEmpty
    private String someprop;
}
因此,当我使用默认配置文件运行应用程序时,从application.yamlconfig中删除application.someprop属性时,验证工作正常,但是,如果使用prodprofileapplication-prod.yaml运行应用程序,并且使用已删除的application.someprop属性运行应用程序,则会从应用程序继承值。yaml且验证不起作用

缺少此属性的主要用例是配置错误。因此,我需要显示适当且可读的日志来解决问题

我想我需要一些定制属性springBinder.class定制,但我找不到任何解决方案


提前谢谢

如果要对不同的配置文件使用不同的属性值,则需要按如下所示给出不同的值。spring.profile.active不定义特定配置文件的属性,它只启用一个配置文件;并重写任何默认属性(如果已明确指定)。如果删除为配置文件定义的属性,它将始终使用默认属性

spring:
   profiles:
       active: prod
application.someprop: prop-default-value

---

spring:
   profiles: prod
application.someprop: prop-prod-value

---

spring:
   profiles: dev
application.someprop: prop-dev-value

缺少什么属性?“当我删除此属性时”什么属性是“此”引用的,即您要删除的属性是什么?请编辑问题并澄清措辞。@Andreas更新了
application.yaml
始终处于加载状态,无论哪个配置文件处于活动状态,因此该文件中的
spring.profiles.active:prod
属性确保
prod
配置文件始终处于活动状态,这意味着将始终加载
application-prod.yaml
。现在,我们已经确定始终加载这两个文件,如果在其中至少一个文件中定义了
应用程序.someprop
,则该属性将具有一个值。现在,请编辑这个问题,并解释您认为属性不会被定义的条件。这是Spring boot的一个特性,
application.yaml
总是被加载。如果你不喜欢,为什么要用它?