Spring Boot 配置加载顺序详解

转载自   Spring Boot 配置加载顺序详解

使用 Spring Boot 会涉及到各种各样的配置,如开发、测试、线上就至少 3 套配置信息了。Spring Boot 可以轻松的帮助我们使用相同的代码就能使开发、测试、线上环境使用不同的配置。

在 Spring Boot 里面,可以使用以下几种方式来加载配置。本章内容基于 Spring Boot 2.0 进行详解。

1、properties文件;

2、YAML文件;

3、系统环境变量;

4、命令行参数;

等等……

配置属性加载的顺序如下:

1、开发者工具 `Devtools` 全局配置参数;2、单元测试上的 `@TestPropertySource` 注解指定的参数;3、单元测试上的 `@SpringBootTest` 注解指定的参数;4、命令行指定的参数,如 `java -jar springboot.jar --name="Java技术栈"`;5、命令行中的 `SPRING_APPLICATION_JSONJSON` 指定参数, 如 `java -Dspring.application.json='{"name":"Java技术栈"}' -jar springboot.jar`6、`ServletConfig` 初始化参数;7、`ServletContext` 初始化参数;8、JNDI参数(如 `java:comp/env/spring.application.json`);9、Java系统参数(来源:`System.getProperties()`);10、操作系统环境变量参数;11、`RandomValuePropertySource` 随机数,仅匹配:`ramdom.*`;12、JAR包外面的配置文件参数(`application-{profile}.properties(YAML)`)13、JAR包里面的配置文件参数(`application-{profile}.properties(YAML)`)14、JAR包外面的配置文件参数(`application.properties(YAML)`)15、JAR包里面的配置文件参数(`application.properties(YAML)`)16、`@Configuration`配置文件上 `@PropertySource` 注解加载的参数;17、默认参数(通过 `SpringApplication.setDefaultProperties` 指定);

数字小的优先级越高,即数字小的会覆盖数字大的参数值,我们来实践下,验证以上配置参数的加载顺序。

1、在主应用程序中添加 Java 系统参数。

@Bean
public CommandLineRunner commandLineRunner() {return (args) -> {System.setProperty("name", "javastack-system-properties");};
}

2、在 application.properties 文件中添加属性。

name = javastack-application

3、在 application-dev.properties 文件中添加属性。

name = javastack-application-dev

4、添加测试类

@RunWith(SpringRunner.class)
@SpringBootTest(value = { "name=javastack-test", "sex=1" })
@ActiveProfiles("dev")
public class SpringBootBestPracticeApplicationTests {@Value("${name}")private String name;@Testpublic void test() {System.out.println("name is " + name);}}

运行 test 单元测试,程序输出:

name is javastack-test

根据以上参数动态调整,发现参数会被正确被覆盖。了解了 Spring Boot 各种配置的加载顺序,如果配置被覆盖了我们就知道是什么问题了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/325687.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JS中遍历数组的两种方式

方式一 for循环 //遍历arr&#xff0c;获取arr中Person对象for(var i0 ; i<arr.length ; i){var p arr[i];//判断Person对象的age是否大于等于18if(p.age > 18){//如果大于等于18&#xff0c;则将这个对象添加到newArr中//将对象放入到新数组中newArr.push(p);}}方式二…

.NET的一点历史故事:作者的一些感想

最近几天通过微博的头条文章平台公开连载了《.NET的一点历史故事》一书的部分草稿。不论是书名还是章节内容&#xff0c;目前真的是仅仅草稿阶段。所以这么早就以连载的方式发布出来&#xff0c;一方面是正在准备在蒙特利尔这边微软技术圈的两场演讲&#xff0c;需要自己尽快恢…

Excel电子表格操作

一、Dos命令才常用的操作&#xff1a; 1.打开Dos窗口&#xff1a;winr 2.切换盘符&#xff1a;直接写盘符&#xff1a; eg: d: 3.新建文件夹&#xff1a;md 文件夹名 4.进入文件夹&#xff1a;cd 文件夹名 5.返回上一级目录&#xff1a;cd… 6.查找本机ip地址&#xff1a;ipcon…

Mybatis中typeAliases标签和package标签

1、typeAliases 主配置文件&#xff1a; <typeAliases><typeAlias type"com.itheima.domain.User" alias"user"></typeAlias></typeAliases>映射配置文件&#xff1a; 2、package 主配置文件<typeAliases><!--<t…

我是怎么把一个项目带崩的

转载自 我是怎么把一个项目带崩的 我是一名项目经理&#xff0c;在过去的四个月里&#xff0c;我把一个项目带崩了&#xff08;上线后频出问题&#xff0c;用户无法使用&#xff09;。在最近的几天&#xff0c;我每天都在反思自己&#xff0c;我都在问自己以下几个问题&…

JS中数组去重

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title><script type"text/javascript">//创建一个数组var arr [1,2,3,2,2,1,3,4,2,5];//去除数组中重复的数字//获取数组中的每一个元素for(var i…

PPT 2010实现使用自定义主题付下载

直接入主题&#xff0c;首先我们打开PPT2010&#xff0c;如下图所示&#xff1a; 点击设计&#xff0c;找到浏览主题&#xff1a; 然后找到我们需要的主题&#xff0c;我已经整理了常用的40套&#xff1a; 最后完美更改

Mybatis中连接池介绍

连接池&#xff1a;我们在实际开发中都会使用连接池。以为它可以减少我们获取连接所消耗的时间mybatis中的连接池mybatis连接池提供了三种方式的配置&#xff0c;配置位置主配置文件SqlMapConfig.xml中的dataSource标签&#xff0c;type属性就是标识采用何种连接池方式type属性…

【深圳】.NET 技术分享交流会

随着微软Build 2017的召开&#xff0c;预期将发布.NET Core 2.0 Preview, 邀请深圳地区.NET技术专家和从业人员&#xff0c;一起分享与交流.NET 技术的发展方向,提高.NET技术氛围&#xff0c;发掘.NET高级人才&#xff0c;为改善.NET生态贡献一份力&#xff0c;使.NET技术在深圳…

JS数组中的剩余方法

<!DOCTYPE html> <html><head><meta charset"utf-8" /><title></title><script type"text/javascript">var arr ["孙悟空","猪八戒","沙和尚"];var arr2 ["白骨精",…

分布式作业 Elastic Job 如何动态调整

转载自 分布式作业 Elastic Job 如何动态调整 前面分享了两篇分布式作业调度框架 Elastic Job 的介绍及应用实战。 ElasticJob&#xff0d;分布式作业调度神器 分布式作业 Elastic Job 快速上手指南 Elastic Job 提供了简单易用的运维平台&#xff0c;方便用户监控、动态修…

好玩的Scratch

一、什么是scratch: 1.图形化编程工具 2.完全免费的软件 二、scracth窗口的主要区域&#xff1a; 1.角色区 2.程序区 3.积木区 4.舞台 5.功能按钮 6.新建背景 三、狐狸散步: 1.将原来的猫角色删掉&#xff0c;新加一个狐狸角色 2.新建山的背景 3.将积木拖动到程序区 四、scratc…

Visual Studio 2017 - Update 2预览版已发布

微软在继续通过Visual Studio Preview项目测试各类新功能&#xff0c;同时会通过公开发布的正式版测试这些新功能在现实世界中的表现情况。通过这种方式&#xff0c;开发者有机会及时了解正在开发的新功能&#xff0c;在开发的早期阶段向微软提供宝贵的反馈&#xff0c;借此为产…

移动WEB特效开发

一、触摸事件&#xff1a; 1.touchstart&#xff1a;手指刚接触屏幕时触发。 2.touchmove:手指在屏幕上移动时触发。 3.touchend:手指移开屏幕时触发。 eg: var span document.getElementsByTagName(“span”)[0]; var div document.getElementsByTagName(“div”)[0]; //手指…

面试过程中千万不要犯这 5 点低级错误

转载自 面试过程中千万不要犯这 5 点低级错误 最近你面了几家公司了&#xff1f;都拿到多少offer了&#xff1f;如果你还没有拿到心仪的offer的话&#xff0c;想想自己是不是在面试中犯了错误&#xff0c;踩中面试官雷区了。 姑且不说面试迟到、仪容问题、简历作假等所有人…

Mybatis框架的连接池配置

xml配置&#xff1a;<?xml version"1.0" encoding"UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><envir…

ASP.NET Core开发之HttpContext

ASP.NET Core中的HttpContext开发&#xff0c;在ASP.NET开发中我们总是会经常用到HttpContext。 那么在ASP.NET Core中要如何使用HttpContext呢&#xff0c;下面就来具体学习ASP.NET Core HttpContext。 注入HttpContextAccessor ASP.NET Core中提供了一个IHttpContextAcces…

移动WEB页面开发

一、如今的移动行业&#xff1a; 1.移动互联网的发展 2.智能手机迅速发展 3.移动WEB应用的发展 4.移动端的开发需求逐年增加 二、移动网页开发和pc网页开发的区别&#xff1a; 1.终端设备及浏览器 2.分辨率 3.视口 4.输入特性&#xff1a; 鼠标、键盘 触摸 三、PC端开发浏览器:…

数据库事务的四大特征

什么是事务&#xff1f; 事务&#xff1a;是数据库操作的最小工作单元&#xff0c;是作为单个逻辑工作单元执行的一系列操作&#xff1b;这些操作作为一个整体一起向系统提交&#xff0c;要么都执行&#xff0c;要么都不执行&#xff1b;事务是一组不可再分割的操作集合&#…