【问题标题】:is spring default profile always active?弹簧默认配置文件是否始终处于活动状态?
【发布时间】:2016-04-06 09:42:22
【问题描述】:

我想知道是否总是应用 spring 默认配置文件,假设它的属性没有被另一个活动配置文件覆盖?

例如我定义了仅与默认配置文件相关的属性。我希望在激活任何其他配置文件时忽略这些属性,这些属性不会被另一个配置文件覆盖,一旦另一个配置文件处于活动状态,它们就不会应用。

根据我的测试,当我激活另一个弹簧配置文件时,这些属性似乎仍在被拾取。我在我的 spring 应用程序属性文件中定义这些属性。

我还定义了一个带有 @Profile("default") 注释的 Bean,并且当我激活另一个配置文件时不会调用该 Bean。但是我在application.xml 下spring.profiles: default 下定义的属性正在被应用。

【问题讨论】:

    标签: spring profile


    【解决方案1】:

    查看here 发布的此解决方案。 您必须根据配置文件定义 2 个 bean,以便保存对不同 properties.file 的引用。在您的情况下,第一个(默认)将具有默认值,而在第二个中,您可以简单地覆盖它们或让变量上的任何其他默认值

    【讨论】:

    • 感谢您的回复,但我仍然不清楚我的问题的答案。我真正想知道的是:是否始终应用默认配置文件中定义的配置属性,除非它们被另一个活动配置文件覆盖?从我的测试来看,它们似乎是。如果答案是肯定的,我想我必须在其他配置文件的范围内用空白值覆盖这些配置属性,如果我希望它们被忽略?
    • 是的,它们是默认应用的,因为您正在注入带有@Profile 注释的bean,所以这就是我粘贴的链接中描述的解决方案,不同之处在于,在链接中,他使用2种不同的配置,但是在您的情况下,您只想简单地放置另一个属性文件,如果有人传递了另一个配置文件,以帮助您更多,您能描述一下您的情况吗?
    • 所以在我的场景中,我在本地运行我的应用程序时为我的应用程序创建了一个嵌入式 h2 数据库,并且我在应用程序 yaml 文件中为该数据库定义了一些数据库属性,在默认配置文件中定义.当我在其他地方运行我的应用程序时(将其部署到 PaaS 解决方案,我想连接到数据库实例,这些默认属性是无关紧要的,不应应用于我的“真实”数据库实例。但它们正在被拾取并导致错误。
    • 好吧,是的,您的上下文中可能存在错误配置,出于与您提到的相同原因,我使用了@Profile 注释,以获取不同的数据库上下文,并且它运行正常,问题是,您每次如何导出您的网络应用程序。您是否使用 maven 设置正确的 $property.Profile ???
    • 我在本地运行时使用 maven 并在 CLI 上指定配置文件属性。在 Paas 上运行时,我正在通过应用程序清单设置配置文件属性。我知道配置文件是在 enviromnet 中设置的,因为它正确地获取了配置文件特定的其他属性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-10
    • 2016-12-25
    • 2019-07-06
    • 1970-01-01
    • 1970-01-01
    • 2016-01-06
    • 2023-03-26
    相关资源
    最近更新 更多