Spring Boot 不仅可以通过配置文件进行配置,还可以通过环境变量、命令行参数等多种形式进行配置。这些配置都可以让开发人员在不修改任何代码的前提下,直接将一套 Spring Boot 应用程序在不同的环境中运行。
Spring Boot 配置优先级
以下是常用的 Spring Boot 配置形式及其加载顺序(优先级由高到低):
命令行参数
来自 java:comp/env 的 JNDI 属性
Java 系统属性(System.getProperties())
操作系统环境变量
RandomValuePropertySource 配置的 random.* 属性值
配置文件(YAML 文件、Properties 文件)
@Configuration 注解类上的 @PropertySource 指定的配置文件
通过 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 指定命令行参数
图1:Spring Boot 指定命令行参数
配置文件
Spring Boot 启动时,会自动加载 JAR 包内部及 JAR 包所在目录指定位置的配置文件(Properties 文件、YAML 文件),下图中展示了 Spring Boot 自动加载的配置文件的位置及其加载顺序,同一位置下,Properties 文件优先级高于 YAML 文件。

Spring Boot 配置文件加载顺序

图2:Spring Boot 配置文件加载位置及优先级

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

这些配置文件得优先级顺序,遵循以下规则:
先加载 JAR 包外的配置文件,再加载 JAR 包内的配置文件;
先加载 config 目录内的配置文件,再加载 config 目录外的配置文件;
先加载 config 子目录下的配置文件,再加载 config 目录下的配置文件;
先加载 appliction-{profile}.properties/yml,再加载 application.properties/yml;
先加载 .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 #开发环境端口号 8081
servlet:
context-path: /in-dev #开发环境上下文路径为 in-dev
spring:
config:
activate:
on-profile: dev #开发环境

3)在 application-test.yml 中,指定测试环境端口号为 “8082”,上下文路径为“/in-test”,配置如下。
#测试环境配置
server:
port: 8082 #测试环境端口 8082
servlet:
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

  2. 在 JAR 包所在目录下创建 application.yml ,并设置上下文路径为“/out-default”,并激活生产环境(prod)Profile。
    #JAR 包外默认配置
    server:
    servlet:
    context-path: /out-default
    #切换配置
    spring:
    profiles:
    active: prod #激活开发环境配置

  3. 打开命令行窗口,跳转到 mySpringBoot 目录下,执行以下命令启动 Spring Boot。
    java -jar mybootdemo-0.0.1-SNAPSHOT.jar
    启动结果如下图。

图3:Spring Boot 使用 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”。

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

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

    使用 Spring Boot 会涉及到各种各样的配置,如开发.测试.线上就至少 3 套配置信息了.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. Spring boot外部配置加载顺序

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

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

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

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

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

  9. SpringBoot配置加载顺序

    文章目录 前言 一.Spring Boot 配置优先级 二.命令行参数 示例 1 配置文件 示例 2 三.示例分析 前言 Spring Boot 不仅可以通过配置文件进行配置,还可以通过环境变量.命令 ...

最新文章

  1. 惠普中国前总裁孙振耀:离开时心痛得哭了出来
  2. 关系型数据库 和 非关系型数据对比 以及 MySQL与Oracle对比
  3. 低通采样和带通采样定理
  4. Java学习笔记19
  5. UVa810 A Dicey Problem 筛子难题
  6. Code::Blocks 16.01 改变注释的的颜色
  7. Intel 64/x86_64/IA-32/x86处理器 - 通用指令(7) - 标志寄存器/标志控制指令 段寄存器指令
  8. 签名证书无效”-在vCenter Server Appliance 6.5 / 6.7上使用Shell脚本重新生成和替换已过期的STS证书(76719)
  9. 对C#中的Close()和Dispose()的浅析
  10. jQuery 图像裁剪插件Jcrop
  11. mysql 修改root密码 修改账户登录host
  12. 如何传递NoteExpress的参考文献(包括题录和附件)给他人?
  13. Axure原型|天猫、京东、拉钩等网站banner原型分享
  14. 让搜索引擎收录hexo博客 | hexo
  15. (根据关键词)查找论文的一些途径
  16. Jetson TX2重要技巧
  17. 使用Auto.js庖丁对Pro Snapshot快照加密的解密打包教程
  18. linux+scrtopic.exe,!截图
  19. Linux内核系统论文写作虚拟机方案
  20. 在美国读书的体会 [转]

热门文章

  1. 10个ADC滤波算法
  2. 7.笔记 MySQL学习——向表中添加行
  3. 为什么企业都独爱客服聊天助手
  4. python快速实现简易双重弹力球小游戏
  5. flex结合Lcds整合spring
  6. 老码农泪述:混职场的九大铁律
  7. 苹果因iPadMini 6大面积“果冻屏”遭集体诉讼
  8. js调用android的闹铃,JS定时器小应用--设置闹铃
  9. idea集成阿里巴巴规范扫描插件
  10. Markdown语法大全汇总