使用 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_JSON` 指定参数, 如 `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 各种配置的加载顺序,如果配置被覆盖了我们就知道是什么问题了。

Spring Boot 配置加载顺序详解相关推荐

  1. Spring Boot配置加载顺序

    Spring Boot 不仅可以通过配置文件进行配置,还可以通过环境变量.命令行参数等多种形式进行配置.这些配置都可以让开发人员在不修改任何代码的前提下,直接将一套 Spring Boot 应用程序在 ...

  2. Spring Boot配置文件加载顺序

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.通过spring.config.location改变配置文件的位置 二.外部配置加载顺序 1.使用命令行参数指定加 ...

  3. Spring Boot 配置文件加载顺序

    1.介绍 依次为: bootstrap.properties -> bootstrap.yml -> application.properties -> application.ym ...

  4. Spring : Spring外部配置加载顺序

    1.美图 2.概述 Spring Boot支持多种外部配置方式 这些方式优先级如下: https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/ ...

  5. Spring boot 属性加载顺序

    1.美图 2.顺序 Spring Boot应用程序有多种设置途径. Spring Boot能从多种属性源获得属性,包括如下几处. (1) 命令行参数 (2) java:comp/env里的JNDI属性 ...

  6. java 静态方法顺序_静态方法的加载顺序详解

    Java 静态代码块 静态方法区别 一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调 ...

  7. Spring boot外部配置加载顺序

    外部配置加载顺序 Spring boot 可以从以下位置加载配置 优先级从高到低 高优先级的配置,覆盖低优先级的配置 所有的配置,会形成互补配置 官网,给出了17个位置 这里,只介绍常用的11个位置 ...

  8. springboot 读取配置文件_使用 @ConfigurationProperties 在 Spring Boot 中加载配置

    本文地址: 使用 @ConfigurationProperties 在 Spring Boot 中加载配置 使用 Spring Boot 加载配置文件的配置非常便利,我们只需要使用一些注解配置一下就能 ...

  9. 类加载顺序及加载过程详解

    转自: 类加载顺序及加载过程详解 下文笔者讲述类的加载顺序及加载过程的详解说明,如下所示 java创建对象的方式分为以下四种 new 反射克隆反序列化 class对象获取的方式分享 //没有完成初始化 ...

最新文章

  1. gMIS吉密斯更新:Pivot透视+图示,List+观察模式
  2. 打开word或者office程序报错:Microsoft Visual C++ Runtime Library. Runtime Error!
  3. CCF-IFAA基金海外参展 全球安全盛会迎来中国声音
  4. 4月22日(牛马不对嘴)
  5. 5.1.3 OS控制I/O设备的几种方式?(程序直接控制方式、中断驱动方式、DMA、通道控制)
  6. Android开发之和风天气篇:1、获取天气信息
  7. VC++动态链接库(DLL)编程(三)――MFC规则DLL
  8. python 中的 __name__
  9. 1w存银行一年多少利息_一百万存银行一年利息多少?提前取出利息怎么算?
  10. 学python能做什么-学Python后到底能干什么
  11. python数据分析系列教程——Pandas全解
  12. 190312每日一句
  13. echarts地图设置label引导线
  14. 通过VBA实现FTP自动下载及关键字检索等功能
  15. (六十五)Android O StartService的 anr timeout 流程分析
  16. CYQ.Data、ASP.NET Aries 百家企业使用名单
  17. 第15篇 2D绘图(五)绘制图片
  18. 300例注册表应用技巧
  19. centos cpu排查_Linux/CENTOS 系统 CPU 占用率较高负载较高问题排查思路 - 沃森博客...
  20. 怎么设置页眉或者页之间相互独立编写

热门文章

  1. Linux系统中软件的“四”种安装原理详解:源码包安装、RPM二进制安装、YUM在线安装、脚本安装包...
  2. Windows 10 Creators Update 4 月 11 日开始推送
  3. [BZOJ 4551][Tjoi2016Heoi2016]树(并查集)
  4. vue.js权威指南----代码解释实例
  5. hash_hmac函数使用不当造成的安全问题
  6. 从JVM指令层面看try-catch-finally返回值问题
  7. tomcat启动不了,报java.lang.Exception: Socket bind failed: [730013] ???
  8. 基于matlab的lsb数字水印
  9. Nginx之负载均衡
  10. Windows服务安装、卸载方法,卸载后在服务列表中仍显示问题,指定的服务已经标记为删除