1、配置文件优先级

classpath:/application.yml

classpath:/config/application.yml

启动目录:/application.yml

启动目录:/config/application.yml

系统属性参数 如:java -Dspring.config.location=/aa/ss/cc/ -jar xxx.jar

命令行参数 如:java -jar xxx.jar --server.port=8888

springboot会从上到下依次读取,重复的字段后者覆盖前者。(也就是说下边的优先级更高,对于没有配置的属性会逐层向上查找,若都没有配置才会使用默认值)

这里只列举了部分常见配置位置,可在springboot官方文档找到详情描述

PS:启动目录是指执行java -jar xxx 命令时所在的目录,idea启动的话就是整个项目的根目录。

2、yml 还是 properties

springboot 中可以使用 application.yml 或者 application.properties 作为配置文件

两者同时存在时 application.properties 优先级更高

但也不绝对,有些springboot 版本中 yml 优先级更高,所以两者不要同时使用

3、启动参数配置

springboot 程序可以在启动时指定配置文件的位置,也可以在启动时直接制定配置项。

配置方法有两种:

  1. 通过 --Xxx 命令行参数
  1.   命令行参数必须放在 -jar Xxx 之后,这些配置会作为 main 方法的入参,最终被传给 SpringApplication.run() 方法,由 spring 处理(优先级高于 -D 系统属性参数)
  1. 通过 -Dxxx 系统属性参数
  1.   系统属性参数,只能在 -jar 之前配置,否则无效。配置后在程序中可以通过 System.getProperty() 方法获取。

PS: --Xxx 命令行参数优先级高于 -D 系统属性参数


关于 spring.config.location 配置

启动时可以通过 spring.config.location 指定配置文件所在的位置,--Xxx 和 -DXxx 均可。但必须是文件夹,且必须以/ 结尾。否则报错 java.lang.IllegalStateException: Unable to load config data from '/ccc/aaa'


关于 spring.config.name 配置

--spring.config.name=bbb

指定配置文件名称,注意不能加文件后缀,否则配置不生效。


关于 系统环境变量

System.getenv() 获取的是系统环境变量,系统环境变量不能通过启动参数配置。但是可以通过shell脚本配置临时环境变量。如:

mac / linux 中:export aaa=xxx & java -jar xxx.jar

windows中:set aaa=xxx & java -jar xxx.jar

idea中:可以配置 Environment variables 选项实现