我不确定这是否是一个有效的问题,但我想知道这是否可行。
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中定义属性,但我需要它是" undefined"当应用程序在一个特定的配置文件中启动下图:
application.properties
keySpecial=specialValue
key1=value1
key2=value2
application-special.properties
key1=valueSpecial1
//unset or undefine keySpecial
keyAlternateSpecial=specialAlternateValue
key3=valueSpecial3
现在,当应用程序以这个"特殊"开始时profile,我希望它能看到最终的属性如下:
keyAlternateSpecial=specialAlternateValue
key1=valueSpecial1
key2=value2
key3=valueSpecial3
请注意,当应用程序在此特殊配置文件中运行时,keySpecial未定义,甚至不存在。
这可能吗?
注意:我知道我可以避免定义" keySpecial"在常见的application.properties中,并在所有其他配置文件特定属性中定义它们。并指定" 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,用户名,密码)。个人资料。
答案 0 :(得分:3)
您可以通过设置groupby()
来伪造从application.property中删除spring.datasource.jndi-name。这种方式spring.datasource.jndi-name=false
不会启用自动配置类。有关详细信息,请参阅ConditionalOnProperty javadoc。
答案 1 :(得分:1)
我通过在默认配置文件中定义JNDI属性来解决我的用例,当没有定义其他配置文件时激活它,这样在开发期间我可以使用不带JNDI的不同数据源。
以下是我的application.yml
文件的摘录,不知道这是否适合您。
spring:
jpa:
database: POSTGRESQL
hibernate:
ddl-auto: none
# Default profile, active by default on JBoss since no spring profiles are activated
---
spring:
profiles: default
datasource:
jndi-name: java:jboss/datasources/anagraficaDS
# Development configuration
---
spring:
profiles: development
datasource:
platform: postgres
url: jdbc:postgresql://localhost:5432/my-db
username: root
password: secret
driverClassName: org.postgresql.Driver