文章目录

  • 前言
  • 一、Spring Boot 配置优先级
  • 二、命令行参数
    • 示例 1
    • 配置文件
    • 示例 2
  • 三、示例分析

前言

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


一、Spring Boot 配置优先级

以下是常用的 Spring Boot 配置形式及其加载顺序(优先级由高到低):

  1. 命令行参数
  2. 来自 java:comp/env 的 JNDI 属性
  3. Java 系统属性(System.getProperties())
  4. 操作系统环境变量
  5. RandomValuePropertySource 配置的 random.* 属性值
  6. 配置文件(YAML文件、Properties 文件)
  7. @Configuration 注解类上的 @PropertySource 指定的配置文件
  8. 通过SpringApplication.setDefaultProperties 指定的默认属性

以上所有形式的配置都会被加载,当存在相同配置内容时,高优先级的配置会覆盖低优先级的配置;存在不同的配置内容时,高优先级和低优先级的配置内容取并集,共同生效,形成互补配置。

二、命令行参数

Spring Boot 中的所有配置,都可以通过命令行参数进行指定,其配置形式如下。

java -jar {Jar文件名} --{参数1}={参数值1} --{参数2}={参数值2}

示例 1

  1. 在 springbootdemo 项目启动时,使用以下命令。
java -jar springbootdemo-0.0.1-SNAPSHOT.jar --server.port=8081 --server.servlet.context-path=/bcb

命令行参数说明如下:

  • –server.port:指定服务器端口号;
  • –server.servlet.context-path:指定上下文路径(项目的访问路径)。

执行结果如下图。

配置文件

Spring Boot 启动时,会自动加载 JAR 包内部及 JAR 包所在目录指定位置的配置文件(Properties 文件、YAML 文件),下图中展示了 Spring Boot 自动加载的配置文件的位置及其加载顺序,同一位置下,Properties 文件优先级高于 YAML 文件。

图 2 说明如下:

  • /myBoot:表示 JAR 包所在目录,目录名称自定义;
  • /childDir:表示 JAR 包所在目录下 config目录的子目录,目录名自定义;
  • JAR:表示 Spring Boot 项目打包生成的 JAR;
  • 其余带有“/”标识的目录的目录名称均不能修改。
  • 红色数字:表示该配置文件的优先级,数字越小优先级越高。

这些配置文件的优先级顺序,遵循以下规则:

  1. 先加载 JAR 包外的配置文件,再加载 JAR 包内的配置文件;
  2. 先加载 config 目录内的配置文件,再加载 config 目录外的配置文件;
  3. 先加载 config 子目录下的配置文件,再加载 config 目录下的配置文件;
  4. 先加载 appliction-{profile}.properties/yml,再加载application.properties/yml;
  5. 先加载 .properties 文件,再加载 .yml 文件。

示例 2

  1. 创建一个名为 mybootdemo 的 Spring Boot 项目,并在src/main/resoources下创建以下4个配置文件。
  • application.yml:默认配置
  • application-dev.yml:开发环境配置
  • application-test.yml:测试环境配置
  • application-prod.yml:生产环境配置

1)在 applcation.yml 文件中,指定默认服务端口号(port)为 “8080”,上下文路径(context-path)为“/mybootdemo”,并激活开发环境(dev)的 profile。

server:port: 8080 #端口号servlet:context-path: /mybootdemo #上下文路径或项目访问路径
spring:profiles:active: dev #激活开发环境配置

2)在 application-dev.yml 中,指定开发环境端口号为 “8081”,上下文路径为“/in-dev”,配置如下。

server:port: 8081 #开发环境端口号 8081servlet:context-path: /in-dev #开发环境上下文路径为 in-dev
spring:config:activate:on-profile: dev #开发环境

3)在 application-test.yml 中,指定测试环境端口号为 “8082”,上下文路径为“/in-test”,配置如下。

#测试环境配置
server:port: 8082 #测试环境端口 8082servlet:context-path: /in-test #测试环境上下文路径 /in-test
spring:config:activate:on-profile: test

4)在 application-prod.yml 中,指定生产环境端口号为 “8083”,上下文路径为“/in-prod”,配置如下。

#生产环境配置
server:port: 8083 #端口号servlet:context-path: /in-prod #上下文路径
spring:config:activate:on-profile: prod
  1. 执行以下 mvn 命令,将 mybootdemo 打包成 JAR,并将该 JAR 包移动到本次磁盘的某个目录下(例如 mySpringBoot 目录)。
mvn clean package
  1. 在 JAR 包所在目录下创建 application.yml ,并设置上下文路径为“/out-default”,并激活生产环境(prod)Profile。
#JAR 包外默认配置
server:servlet:context-path: /out-default
#切换配置
spring:profiles:active: prod #激活开发环境配置
  1. 打开命令行窗口,跳转到 mySpringBoot 目录下,执行以下命令启动 Spring Boot。
java -jar mybootdemo-0.0.1-SNAPSHOT.jar

启动结果如下图。

三、示例分析

  • Spring Boot 在启动时会加载全部的 5 个配置文件,其中位于 JAR 包外的 application.yml 优先级最高;
  • 在 JAR 包外的 application.yml 中,配置激活了生产环境(prod)Profile,即 JAR 包内部的 application-prod.yml 生效。此时,该项目中的配置文件优先级顺序为:JAR 包外 application.yml > JAR 包内 application-prod.yml >JAR 包内其他配置文件;
  • application-prod.yml 的配置内容会覆盖 JAR 包内所有其他配置文件的配置内容,即端口号(port)为“8083”,上下文路径(context-path)为“/in-prod”;
  • JAR 包内的 application-prod.yml 中的上下文路径会被 JAR 包外的 application.yml 覆盖为“/out-default”;
  • JAR 包内的 application-prod.yml 与 JAR 包外的 application.yml,形成互补配置,即,端口号为“8083”,上下文路径为“/out-default”。

SpringBoot配置加载顺序相关推荐

  1. 3springboot:springboot配置文件(外部配置加载顺序、自动配置原理,@Conditional)

    1.外部配置加载顺序 SpringBoot也可以从以下位置加载配置: 优先级从高到低 高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置  1.命令行参数 所有的配置都可以在命令行上进行指定 ...

  2. 配置文件加载位置||外部配置加载顺序||自动配置原理

    配置文件加载位置 SpringBoot会从这四个位置全部加载主配置文件:互补配置: 外部配置加载顺序 自动配置原理 1.自动配置原理: 1).SpringBoot启动的时候加载主配置类,开启了自动配置 ...

  3. springboot配置文件加载顺序_「SpringBoot系列」配置文件加载优先级解析

    SpringBoot提供了外部分配置功能,可以使用属性文件(properties).YAML(yml)文件.环境变量和命令行参数来进行处部参数配置,并t以特定的顺序来处理配置,以便于允许合理的覆盖值. ...

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

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

  5. Spring Boot 配置加载顺序详解

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

  6. SpringBoot_配置-外部配置加载顺序

    接下来我们再来看SpringBoot的一个特点,外部配置的加载顺序,也就是说,SpringBoot我们要写一些配置,配置可以写在我们的配置文件,application.properties,放到类路径 ...

  7. Spring Boot配置加载顺序

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

  8. web.xml 配置 加载顺序

    web.xml 的加载顺序是:context-param -> listener -> filter -> servlet . 过滤器执行顺序是根据filter-mapping ,不 ...

  9. springboot配置文件加载顺序

    1.同一目录下,properties配置优先级 > YAML配置优先级. 2.SpringBoot配置文件可以放置在多种路径下,不同路径下的配置优先级有所不同.可放置目录(优先级从高到低) fi ...

最新文章

  1. 【Python】青少年蓝桥杯_每日一题_2.27_杨辉三角
  2. relocation R_X86_64_32S against `.data‘ can not be used when making a PIE object; recompile with -fP
  3. 史上最全站点降权原因解析
  4. 计算机无法上网的软件故障,解决你99%无法联网问题,高手教你只用1招轻松搞定...
  5. js 栈(进制转换)
  6. Python 中使用help()命令后如何退出
  7. [AtCoder-ARC073F]Many Moves
  8. Springboot(java)程序部署到k8s
  9. 运用计算机怎么实现自动化,如何用计算机串口实现自动化控制
  10. Atitit. Atiposter 发帖机 新特性 poster new feature v11  .docx
  11. 修正Linux下WPS字体库缺失
  12. Coablt strike官方教程中文版
  13. struct.error: short format requires (-32768) <= number <= 32767
  14. php输入为空,ecshop搜索框内容为空提示用户输入内容
  15. OAI搭建编译eNB报错
  16. leetcode-拓扑排序
  17. Kubernetes 1.14 发布,31 项功能增强
  18. android手机8g内存够用嘛,安卓手机8G内存和12G内存有啥区别?
  19. 利用vue实现树表格分页
  20. 介绍一款软件卸载工具IObit

热门文章

  1. arm 指令 学习载录
  2. 吃鸡又一重大更新,只有跑毒才能拯救你
  3. #牛客网 大吉大利,今晚吃鸡——跑毒篇 (模拟)
  4. element-ui 使用分享
  5. Vue拖拽组件开发实例
  6. Android Spring动画–基于物理的动画
  7. python将list转为矩阵_python list转矩阵的实例讲解
  8. c++客户端 grpc_gRPC应用C++
  9. SD卡应用总结(Fatfs)
  10. Weblogic相关漏洞