SpringBoot: 配置加载顺序
在应用程序中各种配置是不可避免的,Spring中对配置的抽象(Environment)可以说是达到了极致,其中有一项尤为突出:PropertySource(配置来源),配置来源通常包括命令行参数,系统属性,系统变量,perperties文件等。在使用SpringBoot过程中,将这些技术更进一步发挥,已经可以在很多环境下使用各种各样的配置。
配置的使用通常使用${}占位符来表示,可以在 properties文件中,基于XML的applicationContext.xml配置中,基于Annotation的@Value、@ConfigurationProperies中使用。
那么在使用过程中,查找顺序配置项的如何呢?
- Devtools global settings properties on your home directory (
~/.spring-boot-devtools.propertieswhen devtools is active). 用于开发环境。 @TestPropertySourceannotations on your tests. (用于单元测试环境)@SpringBootTest#propertiesannotation attribute on your tests.(用于单元测试环境)- Command line arguments. (命令行参数 java -jar xxx.jar args, 其中参数形式是 --key1=value1 --key2=value2)
 - Properties from 
SPRING_APPLICATION_JSON(inline JSON embedded in an environment variable or system property) ServletConfiginit parameters.ServletContextinit parameters.- JNDI attributes from 
java:comp/env. - Java System properties (
System.getProperties()). - OS environment variables.
 - A 
RandomValuePropertySourcethat only has properties inrandom.*. (这个是用于取一个随机数,例如 random.int, random.long, random.uuid, random.int(10), random.int[10,100]等等) - Profile-specific application properties outside of your packaged jar (
application-{profile}.propertiesand YAML variants) 其实包括 .properties,.xml,.yml,yaml,详情见下面说明。 - Profile-specific application properties packaged inside your jar (
application-{profile}.propertiesand YAML variants) - Application properties outside of your packaged jar (
application.propertiesand YAML variants). - Application properties packaged inside your jar (
application.propertiesand YAML variants). @PropertySourceannotations on your@Configurationclasses.- Default properties (specified using 
SpringApplication.setDefaultProperties). 
对于第12, 13, 14, 15 项,详细情况是这样的:
在程序启动是,会查找并加载Profiles文件,它的详细过程是:
1) 取得要激活哪些profiles,以及这些profile可能存放的位置。
     1.1)  使用PropertySources.get("spring.profiles.active")获取到要激活哪些Profiles,如果不指定会使用默认的名字:application。
              当然了,也可以使用编程的方式设置: 在程序开始之前执行代码:SpringApplication.setAdditionalProfiles("yourProfile")
     1.2)  使用PropertySources.get("spring.config.location")获取要激活的profiles可能存放的位置。如果不指定该属性,会使用默认位置:
file:./config/ file:./ classpath:./config/ classpath:./
2) 从"spring.config.location指定的位置去加载"spring.profiles.active指定的配置文件。
配置文件以 [.properties, .xml, .yml, yaml]顺序查找,找不到的情况下会找下一个。
examples:
        如果没有配置spring.profiles.active, spring.config.location, 则会找
file:./config/application-default.[peroperties|xml|yml|yaml] file:./application-default.[peroperties|xml|yml|yaml] classpath:./config/application-default.[peroperties|xml|yml|yaml] classpath:./application-default.[peroperties|xml|yml|yaml] file:./config/application.[peroperties|xml|yml|yaml] file:./application.[peroperties|xml|yml|yaml] classpath:./config/application.[peroperties|xml|yml|yaml] classpath:./application.[peroperties|xml|yml|yaml]
SpringBoot: 配置加载顺序的更多相关文章
- SpringBoot配置加载顺序
		
一般我们会将SpringBoot应用需要的配置内容放在项目工程中,然后通过spring.profiles.active或是通过Maven来实现多环境的支持.但是,当团队逐渐壮大,分工越来越细之后,往往 ...
 - 3springboot:springboot配置文件(外部配置加载顺序、自动配置原理,@Conditional)
		
1.外部配置加载顺序 SpringBoot也可以从以下位置加载配置: 优先级从高到低 高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置 1.命令行参数 所有的配置都可以在命令行上进行指定 ...
 - SpringBoot——配置文件加载位置及外部配置加载顺序
		
声明 本文部分转自:SpringBoot配置文件加载位置与优先级 正文 1. 项目内部配置文件 spring boot 启动会扫描以下位置的application.properties或者applic ...
 - Spring Boot 配置加载顺序详解
		
使用 Spring Boot 会涉及到各种各样的配置,如开发.测试.线上就至少 3 套配置信息了.Spring Boot 可以轻松的帮助我们使用相同的代码就能使开发.测试.线上环境使用不同的配置. 在 ...
 - Spring Boot配置加载顺序
		
如果加载的配置有重复的,它们的加载顺序是这样的,数字越小的优先级越高,即优先级高的覆盖优先级低的配置. Devtools global settings properties on your home ...
 - 【串线篇】spring boot外部配置加载顺序
		
SpringBoot也可以从以下位置加载配置: 原则仍然是优先级从高到低:高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置 1.命令行参数 所有的配置都可以在命令行上进行指定 java -j ...
 - web.xml 配置 加载顺序
		
web.xml 的加载顺序是:context-param -> listener -> filter -> servlet . 过滤器执行顺序是根据filter-mapping ,不 ...
 - deepin 环境变量配置加载顺序
		
加载顺序,默认是没有 .bash_profile 文件 1. non-login 方式 ~$ su deepin run /ect/bash.bashrc run .bashrc 2.login 方式 ...
 - Springboot配置文件加载顺序
		
使用Springboot开发的时候遇到了配置的问题,外部config里的配置文件本来没有配置https怎么启动还是https呢,原来开发中测试https在classpath路径的配置文件添加https ...
 
随机推荐
- Tomcat下wtpwebapps文件夹 和 webapps文件夹区别
			
这两者其实没有区别.都是项目部署路径 webapps : tomcat默认部署路径 wtpwebapps : eclipse默认部署路径 只不过Tomcat6将wtpwebapps作为了默认路径,如果 ...
 - Kafka OffsetMonitor:监控消费者和延迟的队列
			
一个小应用程序来监视kafka消费者的进度和它们的延迟的队列. KafkaOffsetMonitor是用来实时监控Kafka集群中的consumer以及在队列中的位置(偏移量). 你可以查看当前的消费 ...
 - 基于 IJKPlayer-concat 协议的视频无缝拼接技术实现
			
一.前言 Hi,大家好,我是承香墨影! 开门见山,开篇名义.今天来聊聊如何将多段视频,拼接成一个完整而连续的视频,然后无缝进行播放. 这样的需求应该不算偏门吧? 最简单的就是一些视频 App,会将大段 ...
 - [poj1094]Sorting It All Out_拓扑排序
			
Sorting It All Out poj-1094 题目大意:给出一些字符串之间的大小关系,问能否得到一个唯一的字符串序列,满足权值随下标递增. 注释:最多26个字母,均为大写. 想法:显然,很容 ...
 - [bzoj1497][NOI2006]最大获利_网络流_最小割
			
最大获利 bzoj-1497 题目大意:可以建立一个点,花费一定的代价:将已经建立的两个点之间连边,得到一定收益.有些节点之间是不允许连边的. 注释:1<=点数<=5,000,1<= ...
 - C语言操作符/表达式及其作用总结
			
一.算术操作符:+ - * / % 1. 除了 %操作符之外,其他的 几个操作符可以作 用于整数和浮点数. 2. 对于"/"操作符如果两个操作数都为整数,执行整数除法.而只要有浮点 ...
 - 跟着大神学zookeeper分布式锁实现-----来自Ruthless
			
前几天分享了@Ruthless大神的Redis锁,发现和大家都学习了很多东西.因为分布式锁里面,最好的实现是zookeeper的分布式锁.所以在这里把实现方式和大家分享一下. zookeeper分布式 ...
 - PHP  相对完整的分页
			
效果链接http://love.bjxxw.com/oejiaoyou/pubu/zhaopian.php php 分页 <?php /* * * * 说明 吉海波 2015/9/17 * $p ...
 - 听翁恺老师mooc笔记(14)--格式化的输入与输出
			
关于C语言如何做文件和底层操作: 文件操作,从根本上说,和C语言无关.这部分的内容,是教你如何使用C语言的标准库所提供的一系列函数来操作文件,最基本的最原始的文件操作.你需要理解,我们在这部分所学习的 ...
 - 第二次作业:APP案例分析
			
App案例分析 产品:三国杀-页游手游双通 选择理由 当今社会手机已经渐渐取代了电脑在人们日常生活的需求,既然要选择APP进行案例分析,首推的估计就是手机APP了.三国杀是陪伴我高中时代的主要娱乐方式 ...