java - 将应用程序属性覆盖为未定义/未设置

标签 java spring-boot

我不确定这是否是一个有效的问题,但我想知道这是否可能。

一个 Spring boot 项目有一个 application.properties 和几个配置文件特定的属性。配置文件特定的属性用 application-profile.properties 中定义的任何内容覆盖已定义的 application.properties,并且还添加专门属于配置文件特定属性的那些属性。下图:

应用程序属性

key1=value1
key2=value2

应用程序配置文件.properties

key1=valueProfile1
key3=valueProfile3

当应用程序以此配置文件启动时,它看到的最终属性如下:

key1=valueProfile1
key2=value2
key3=valueProfile3

简而言之,您拥有通用属性和配置文件属性的联合,配置文件属性值附加并覆盖通用属性。

但是,如果在天知道是什么情况下,我需要在公共(public) application.properties 中定义一个属性,但当应用程序在一个特定的配置文件中启动时,我需要它是“未定义的”怎么办。下图:

应用程序属性

keySpecial=specialValue
key1=value1
key2=value2

application-special.properties

key1=valueSpecial1
//unset or undefine keySpecial
keyAlternateSpecial=specialAlternateValue
key3=valueSpecial3

现在,当应用程序以这个“特殊”配置文件启动时,我希望它看到如下最终属性:

keyAlternateSpecial=specialAlternateValue
key1=valueSpecial1
key2=value2
key3=valueSpecial3

请注意,当应用程序在此特殊配置文件中运行时,keySpecial 未定义,甚至不存在。

这可能吗?

注意:我知道我可以避免在通用 application.properties 中定义“keySpecial”,而在所有 其他配置文件特定属性中定义它们。并仅在“特殊”配置文件属性中指定“keyAlternateSpecial”。

更多信息:

让我对此疑惑的场景是spring boot datasource jndi属性。 From the docs

spring.datasource.jndi-name= # JNDI location of the datasource. Class, url, username & password are ignored when set.

此属性的存在使应用程序忽略其他数据源属性(类、url、用户名、密码),即使它们已设置也是如此。

我不允许从“application.properties”中删除 jndi 属性。但是我想取消设置/取消定义它并在“特殊”配置文件属性中添加其他数据源属性(类、url、用户名、密码)。

最佳答案

您可以通过设置 spring.datasource.jndi-name=false 假装从 application.property 中删除 spring.datasource.jndi-name。这样 @ConditionalOnProperty(prefix = "spring.datasource", name = "jndi-name") 将不会启用自动配置类。有关详细信息,请参阅 ConditionalOnProperty javadoc。

关于java - 将应用程序属性覆盖为未定义/未设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39702392/

相关文章:

java - Spring Boot 2.1 中的 DataSource bean 覆盖

java - org.hibernate.exception.DataException 虽然被捕获

java - ArrayList "get(i)"命令使用公共(public)类变量

java - 如何确定编译器如何优化代码?

java - Intellij 和 Kotlin 找不到 Log4j2 配置

java - 无法让 MappedSuperClass 抽象实体与 Spring Boot 和 JPA 一起使用

java - 工厂设计模式缺失环节的实现

spring-mvc - Spring/Thymeleaf 在处理@PostMapping 时抛出 "Cannot create a session after the response has been committed"

java - 刷新了 Spring Boot 上下文中的 Jooq CastException

java - 没有 client_secret 的 Spring Security OAuth 2.0