Spring 多弹簧配置文件的属性解析(yaml配置)
当多个配置文件用于特性解析时,是否有定义的顺序 我有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 这是我可以信赖的吗?我的意思是,它是在春
名称:无
---
春天:
简介: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);
}
}