SpringBoot外部化配置
外部化配置(Externalized Configuration)是指将应用的配置从代码中剥离出来,放在外部文件或环境中进行管理的一种机制。
通俗地说,就是你不需要在代码里写死配置信息(比如数据库账号、端口号、日志级别等),而是把这些配置信息放在配置文件、命令行、环境变量等外部载体里。这样,你可以在不修改源码的情况下,就改变应用行为。
SpringBoot的外部化配置方式,包括但不限于
1.application.properties或者yml或者yaml文件
2.系统环境变量
3.JVM参数
4.命令行参数(启动参数)
......
优先级

声明:测试版本为SpringBoot,各版本关于application.properties或者yaml或者yml的优先级可能有所变动
1.application.properties或者yml或者yaml文件优先级
说明:配置在SpringBoot项目的resources下的application.properties或者yaml或者yml这属于内部化配置,其实SpringBoot应用程序默认是先去找外部化配置.也就是说会先去找外部的application.properties或者yaml或者yml
1.1)内部化配置application的优先级别

此时的运行结果 也就是说application.properties的优先级最高

当resources下有config文件夹之后

运行结果 也就是说application.properties/yaml/yml 内部化时候 resources/config中的application.properties优先级最高

1.2).外部化配置application的优先级别
首先我保留内部化的所有application



开始运行项目

证明了外部化配置application.properties/yaml/yml优先级高于内部化配置

2.系统环境变量
这里以临时设置环境变量来证明,环境变量的优先级别高于外部配置的application.properties/yaml/yml
重新打开cmd窗口


证明环境变量优先级别高于外部application配置

3.JVM参数

执行结果
证明JVM参数优先级高于环境变量

4.命令行参数(注意命令行参数不同于JVM参数,启动参数)

执行结果
证明命令行参数执行优先级最高

注意
java -Dserver.port -jar demo.jar --server.port
1. JVM 参数必须以 -D 开始
2. JVM 参数必须写在 java 命令之后、-jar 之前
3. -jar 必须写在要启动的 .jar 文件之前
4. --命令行参数 必须写在 .jar 文件之后



优先级排名
1.命令行参数优先级最高
2.JVM参数优先级其次
3.环境变量
4.外部application.properties/yaml/yml
如何改变配置文件名字呢???
spring.config.location
spring.config.name 剩下自己参考

