将应用程序属性重写为未定义/未设置

bjg7j2ky  于 2022-10-04  发布在  Spring
关注(0)|答案(3)|浏览(148)

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

一个Spring Boot项目有一个Applation.Properties和几个特定于配置文件的属性。特定于配置文件的属性会用应用程序-配置文件中定义的内容覆盖已定义的应用程序.属性,还会添加那些只属于特定于配置文件属性的属性。插图如下:

Application.properties

key1=value1
key2=value2

Application-profile.properties

key1=valueProfile1
key3=valueProfile3

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

key1=valueProfile1
key2=value2
key3=valueProfile3

简而言之,您拥有公共属性和配置文件属性的并集,配置文件属性值附加并覆盖公共属性。

但是,如果在一个天知道是什么的场景中,我需要在公共应用程序中定义一个属性,但是当应用程序在一个特定的配置文件中启动时,我需要它是“未定义的”,该怎么办呢?插图如下:

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,甚至不存在。

这个是可能的吗?

注意:我知道我可以避免在公共应用程序.Properties中定义“keySpecial”,而在所有其他配置文件特定的属性中定义它们。并且只在“特殊”配置文件属性中指定“keyAlternateSpecial”。

更多信息:

让我对此感到疑惑的场景是Spring Boot数据源jndi属性。From the docs

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

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

我不被允许从“Applation.Properties”中删除jndi属性。相反,我想取消设置/取消定义它,并将其他数据源属性(类、URL、用户名、密码)添加到“特殊的”配置文件属性中。

bweufnob

bweufnob1#

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

ldfqzlk8

ldfqzlk82#

我通过在默认配置文件中定义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
fdbelqdn

fdbelqdn3#

聚会迟到了,但是:

SpringBoot 2.4以来,配置文件组将是一个很好的选择。

keySpecial=specialValue(和其他相关配置)放入其自己的配置文件中-让我们称其为special
然后将其添加到它所需的配置文件中。因此,如果您具有配置文件abc,并且只需要special位于ab中,则:

spring.profiles.group.profilea[0]=special
spring.profiles.group.profileb[0]=special

相关问题