Spring 多弹簧配置文件的属性解析(yaml配置)

Spring 多弹簧配置文件的属性解析(yaml配置),spring,spring-boot,configuration,Spring,Spring Boot,Configuration,当多个配置文件用于特性解析时,是否有定义的顺序 我有yaml配置文件: 名称:无 --- 春天: 简介:prod 名称:prodName --- 春天: 简介:dev 姓名:devName 当应用程序在没有(默认)配置文件的情况下运行时,将打印none。对于dev/prod概要文件,将打印devName/prodName(到目前为止还不错) 当我试图将配置文件定义为dev时,将打印prodprodName,当我指定prod时,将打印devdevName 这是我可以信赖的吗?我的意思是,它是在春

当多个配置文件用于特性解析时,是否有定义的顺序

我有yaml配置文件:

名称:无
---
春天:
简介:prod
名称:prodName
---
春天:
简介:dev
姓名:devName
当应用程序在没有(默认)配置文件的情况下运行时,将打印
none
。对于dev/prod概要文件,将打印devName/prodName(到目前为止还不错)

当我试图将配置文件定义为
dev时,将打印prod
prodName
,当我指定
prod时,将打印dev
devName

这是我可以信赖的吗?我的意思是,它是在春天指定的吗?我没有找到它

完整版本(用于复制) application.yml Configuration.java SpringBootConsoleApplication.java 编辑:

样本输出:

c:\betlista\SpringPropertyResolutionMultipleProfiles>java-jar-target\spring-boot-console-app-1.0.jar
…:名称:无,标签:labelValue
c:\betlista\SpringPropertyResolutionMultipleProfiles>java-jar-Dspring.profiles.active=dev target\spring-boot-console-app-1.0.jar
…:名称:devName,标签:labelValue
c:\betlista\SpringPropertyResolutionMultipleProfiles>java-jar-Dspring.profiles.active=dev,prod target\spring-boot-console-app-1.0.jar
…:名称:prodName,标签:labelValue
c:\betlista\SpringPropertyResolutionMultipleProfiles>java-jar-Dspring.profiles.active=prod,dev target\spring-boot-console-app-1.0.jar
…:名称:devName,标签:labelValue
编辑2:

话题 有一个问题,我将其称为主题-

虽然可以将
@PropertySource
与属性文件一起使用,但不能与YAML文件一起使用。目前我知道的唯一解决方案是使用,例如
-Dspring.config.additional location=classpath:topic1.yml

编辑3:

这个问题和我这里的问题一样,但没有答案。那个问题是关于豆子的,而不是关于属性的。公认的答案是“
spring.profiles.active系统属性
不重要”,我认为这是不正确的(在属性上下文中)。如果你同意,请投票支持重新开放

这是我可以信赖的吗

是的,最后胜利战略是一致的,是:

如果指定了多个配置文件,则应用最后一个wins策略。例如,如果prod、live配置文件由spring.profiles.active属性指定,则application-prod.properties中的值可以被application-live.properties中的值覆盖


(无关,但与您共享的文档的链接有关。我不知道这是否是意外,但这是6年前发布的Spring Boot 1.2.x的文档)。

它将被.yml文件中给出的最后一个配置文件覆盖。如果您定义了dev,然后是prod。那么最终prod将被覆盖。不,这不是我的工作方式。。。这取决于您指定为活动配置文件的内容…此问题在没有正确答案的情况下关闭,请投票支持重新打开,因为创建新的配置文件(副本)对我来说毫无意义…答案中粗体部分就是您所需要的:“最后一个bean定义获胜”。当您使用“prod,dev”时,“dev”键将在“prod”键之后加载,因此您自己也注意到了这一点。是的,我可以看出原始问题与您的问题不同(只是结果相同)。我很快会在这里添加一个答案。谢谢,这正是我想要的。也许当时我正在使用SpringBoot1.2应用程序。。。
name: none
---
spring:
  profiles: dev
name: devName
---
spring:
  profiles: prod
name: prodName
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

@Component
@ConfigurationProperties
public class Configuration {

    String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import java.util.List;

@SpringBootApplication
public class SpringBootConsoleApplication implements CommandLineRunner {

    private static Logger LOG = LoggerFactory.getLogger(SpringBootConsoleApplication.class);

    @Autowired
    Configuration conf;

    public static void main(String[] args) {
        SpringApplication.run(SpringBootConsoleApplication.class, args);
    }

    @Override
    public void run(String... args) {
        LOG.info("name: {}", conf.name);
    }

}