我不确定这是否是一个有效的问题,但我想知道这是否可行.
Spring启动项目有一个application.properties和几个配置文件特定的属性.特定于配置文件的属性会覆盖已定义的application.properties以及application-profile.properties中已定义的任何属性,并且还会添加属于特定于配置文件的属性的属性.下图:
application.properties
key1=value1
key2=value2
application-profile.properties
key1=valueProfile1
key3=valueProfile3
当应用程序以此配置文件启动时,它看到的最终属性如下:
key1=valueProfile1
key2=value2
key3=valueProfile3
简而言之,您具有公共属性和配置文件属性的并集,其中配置文件属性值附加并覆盖公共属性.
但是,如果在上帝知道的情况下,我需要在公共application.properties中定义属性,但是当应用程序在一个特定的配置文件中启动时,我需要它“未定义”.下图:
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,用户名,密码).