Java 防止spring中的属性继承
我有几个配置文件,如: 应用程序.yamlJava 防止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
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
总是被加载。如果你不喜欢,为什么要用它?