在春季防止属性继承

时间:2019-12-05 19:48:01

标签: java spring spring-boot configuration-files

我有几个配置文件,例如:

application.yaml

spring:
    profiles:
        active: default

application.someprop: common

application-prod.yaml

spring:
    profiles:
        active: prod

application.someprop: prod

我为此属性提供了一个配置类,并对其进行了验证,例如:

@Validated
@ConfigurationProperties(prefix = "application")
public class ApplicationProps {
    @NotEmpty
    private String someprop;
}

因此,当我使用默认配置文件运行应用程序时,当我从 application.yaml 配置中删除 application.someprop 属性时,验证工作正常带有 prod 配置文件 application-prod.yaml 且删除了 application.someprop 属性的应用,该值将从 application.yaml继承,并且验证无效。

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

我认为我需要一些自定义属性spring Binder.class 定制,但是我找不到任何解决方案。

谢谢!

1 个答案:

答案 0 :(得分:-1)

如果要对不同的配置文件使用不同的属性值,则需要如下提供不同的值。 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
相关问题