Spring boot Spring.profiles.include:donds';无法读取与配置文件相关的属性

Spring boot Spring.profiles.include:donds';无法读取与配置文件相关的属性,spring-boot,Spring Boot,有几种方法可以定义Spring引导应用程序的“活动配置文件”。 默认设置是通过命令行传递,如下所示: java-Dspring.profiles.active=dev,local-jar-myapp.jar 它工作正常(如预期的那样):所有三组与概要文件相关的属性都将按正确的顺序加载: application.yaml application-dev.yaml将覆盖上一个 application local.yaml也将覆盖上一个属性(这些属性将具有最高优先级) 基于这样的想法,我的“本地”配置

有几种方法可以定义Spring引导应用程序的“活动配置文件”。 默认设置是通过命令行传递,如下所示:

java-Dspring.profiles.active=dev,local-jar-myapp.jar

它工作正常(如预期的那样):所有三组与概要文件相关的属性都将按正确的顺序加载:

  • application.yaml
  • application-dev.yaml
    将覆盖上一个
  • application local.yaml
    也将覆盖上一个属性(这些属性将具有最高优先级)
  • 基于这样的想法,我的“本地”配置文件应该始终“使用并覆盖”来自“开发”的属性,让我们“硬编码”这样的行为

    让我们使用
    “spring.profiles.include”
    特性来实现这一点。因此,以下行被添加到
    “application-local.yaml”

    spring.profiles:
        include:
            - dev
    
    我希望,现在我只能在命令行中传递“local”配置文件,并且“dev”配置文件将自动应用(当然,还有他的属性):

    java-Dspring.profiles.active=local-jar-myapp.jar

    但是oop*:忽略
    'application-dev.yaml'
    中的属性

    为什么?是虫子吗?这是一种迫使我直接在命令行中列出所有配置文件的功能吗?

    我确信概要文件激活的行为应该是相同的,而活动概要文件列表是如何传递给Spring Boot framework的

    申请书:

    application-dev.yaml:

    application-local.yaml:

    Run1:
    java-Dspring.profiles.active=dev,local-jarmyapp.jar
    正确输出:

    myProps         = MyProps(name=default-name, url=dev-url, user=local-user)
    activeProfiles  = dev, local
    
    myProps         = MyProps(name=default-name, url=default-url, user=local-user)
    activeProfiles  = local
    
    这是正确的,因为
    url=dev url

    Run2:
    java-Dspring.profiles.active=local-jar-myapp.jar
    输出不正确:

    myProps         = MyProps(name=default-name, url=dev-url, user=local-user)
    activeProfiles  = dev, local
    
    myProps         = MyProps(name=default-name, url=default-url, user=local-user)
    activeProfiles  = local
    
    这是不正确的,因为
    url=defaulturl
    activeProfiles
    根本不包含“dev”


    请帮助我了解如何使用
    spring.profiles。在yaml中包含
    功能以构建一种顶级配置文件,该配置文件将自动激活其他配置文件。

    Run2中,您以本地方式提供配置文件 i、 e

    因此spring将首先加载application.yml,然后加载application local.yml

    我可以看出输出是预期的

    由于application-local.yml中没有name和url等属性,因此这些字段的值将与application.yml中的值相同


    仅供参考:始终调用application.yml,而与profile无关,然后它会被-Dspring.profiles.active属性中提到的profile覆盖在Run2中,您将profile设置为local i、 e

    因此spring将首先加载application.yml,然后加载application local.yml

    我可以看出输出是预期的

    由于application-local.yml中没有name和url等属性,因此这些字段的值将与application.yml中的值相同


    仅供参考:无论配置文件如何,总是调用application.yml,然后它会被-Dspring.profiles.active属性中提到的配置文件覆盖,该配置文件由您推荐测试。“本地”配置文件被重命名为“bar”(以及配置文件文件文件)输出:``myProps=myProps(name=default name,url=default url,user=bar user)activeProfiles=bar````所以-同样的问题也存在:-(@NakulGoyal,根据您的建议进行测试。“本地”配置文件被重命名为“bar”(以及配置文件文件文件)输出:```myProps=myProps(name=default name,url=default url,user=bar user)activeProfiles=bar```so-同样的问题:-(是的,它现在是如何运行的。但是,在同一时间,我的application-local.yml中有以下行:
    spring.profiles.include:-dev
    SpringBoot应该将dev配置文件添加到帐户中并加载application-dev.yaml,你不这么认为吗,@Nakul?是的,它现在是如何运行的。但是,在同一时间,有以下内容我的application-local.yml中的行:
    spring.profiles.include:-dev
    SpringBoot应该将dev配置文件添加到帐户并加载application-dev.yaml,你不这么认为吗,@Nakul?
    myProps         = MyProps(name=default-name, url=dev-url, user=local-user)
    activeProfiles  = dev, local
    
    myProps         = MyProps(name=default-name, url=default-url, user=local-user)
    activeProfiles  = local
    
    -Dspring.profiles.active=local