如何防止 application.properties 属性继承

Val*_*ler 1 java spring properties-file spring-boot

假设我有一个src/main/ressources/application.properties包含以下(示例性)条目:

server.ssl.trust-store=/config/app.jks
Run Code Online (Sandbox Code Playgroud)

以及多个环境的多个 application.properties

/config
|---/prod
|   |---/application.properties // overrides "server.ssl.trust-store"
|---/int
    |---/application.properties
/src
|---/main
    |---/resources
        |---/application.properties // contains entry "server.ssl.trust-store"
Run Code Online (Sandbox Code Playgroud)

目录中的两个application.properties/config都继承自src/main/resources/application.properties。在 /config/prod/application.properties 中,我们要覆盖该条目。这一切都按预期进行。

现在,我的问题是:是否可以禁止属性的继承?我尝试用空值覆盖它,但这不起作用,并且被不同地解释为根本没有设置它。

注意:server.ssl.enabled=false对于这个特殊情况,我知道(来源)的存在。

Ahm*_*yed 6

您可以创建一个新的 spring 配置文件,例如 ,ssl并在其中添加 ssl 配置

# in application-ssl.properties
server.ssl.trust-store=/config/app.jks
Run Code Online (Sandbox Code Playgroud)

然后,您可以通过“导入”ssl 配置文件按需在应用程序中启用这些配置。

# in application-prod.properties
spring.profiles.include=ssl
Run Code Online (Sandbox Code Playgroud)

如果您不希望出现该值,则可以忽略此语句。

另一种方法是直接在application.properties

# in common application.properties
spring.myproperty=44 # ... etc, normal app properties
---
spring.config.activate.on-profile=ssl # These configs apply to the ssl profile
server.ssl.trust-store=/config/app.jks
Run Code Online (Sandbox Code Playgroud)