gpt4 book ai didi

java - Spring Boot 设置包含通过环境变量的配置文件

转载 作者:行者123 更新时间:2023-11-30 02:04:24 34 4
gpt4 key购买 nike

我想知道是否有其他人在使用 Spring Boot 2.0.3 时注意到这个问题。在我的 application.properties 中,我已将 spring.profiles.active 设置为我将使用的全局配置文件。然后,根据部署到的环境,我在环境变量中设置 spring.profiles.include 。但是,当应用程序运行时,它仅选取使用 include 属性指定的配置文件。所以

application.properties

spring.profiles.active=http

环境

spring.profiles.include=dev

结果

2018-08-09 13:45:35.025 INFO [main] 应用程序:以下配置文件处于 Activity 状态:dev

而不是

2018-08-09 13:45:35.025 INFO [main] 应用程序:以下配置文件处于 Activity 状态:dev、http

如果两个属性(spring.profiles.active 和 spring.profiles.include)设置在同一位置,则效果很好。这对我来说似乎是一个错误,或者我做了一些愚蠢的事情?

据我了解,Spring 将遍历它的每个属性源,直到找到该属性 - 这似乎不会发生在这里。

最佳答案

TL;DR:不要使用spring.profiles.active:它并不完全是您所认为的那样。

<小时/>

长版

Uuum,我尝试调试一下配置文件是如何在 spring-boot 中加载的:

为了模仿你的情况,我放了一个

  • spring.profiles.include=dev 在我的环境
  • spring.profiles.active=demo 在我的 application.yml

我到达了ConfigFileApplicationListener$Loader,这就是奇迹发生的地方:

initializeActiveProfiles() 期间,加载程序在我的环境中查找spring.profiles.active(因为环境优先于属性)然后是 spring.profiles.include (仍在环境中)。然后它激活了找到的配置文件,在我的例子中是 dev

之后,它尝试从其 propertySources 加载后续配置文件,它确实在其中找到 spring.profiles.active=dem...

但是,在 maybeActivateProfiles() 中,碰巧 this.activatedProfiles 设置为 true(duh,dev 已经被激活),因此,demo 自愿不激活。

我对此的看法是,spring.profiles.active用于(作为开关)激活第一个配置文件,然后仅include 适用。这里有趣的是,当在具有更高优先级的文档中找到 include 时,它优先于 active

关于java - Spring Boot 设置包含通过环境变量的配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51767641/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com