前言
日常开发中,我们创建SpringBoot项目时,会直接在已有的resource目录下的application.properties中配置信息或者新建一个application.yml中配置信息,让项目读取使用。那除了这种方式,还有其他方式吗?有的,我们一探究竟!
一、properties和yaml/yml的区别
- 优先级不同
properties优先级是高于yml的,但读取顺序是先yml后properties。如果两种文件同时存在,不同的部分以properties为准,是互补的关系。 - 写法不同
properties是以点分开,yml是以空格分开
application.properties文件配置:
server.port=9090
gx.msg=hi
gx.age=15
gx.dog.name=${gx.msg}
gx.dog.age=${gx.age}
#---------------------------------------------
application.yml文件配置:
server:
port: 9090
gx:
msg: hi
age: 15
dog:
name: ${gx.msg}_dog
age: ${gx.age}
#以空格的缩进程度来控制层级关系,空格个数不重要。
二、配置文件存放位置
根据SpringBoot官方文档,配置文件一般可以放在这4种地方:
1、A /config subdirectory of the current directory
2、The current directory
3、A classpath /config package
4、The classpath root
即:
- java 命令当前运行目录下的 config 目录;
- java 命令当前运行目录;
- classpath 目录下的 config 目录;
- classpath 目录下;
这四种优先级依次降低。如果四个地方我都放了配置文件,会优先使用 java 命令当前运行目录下的 config 目录;
具体先后如下(比如jar在target目录下):
target/
|- config/
|- application.properties (1)
|- application.properties (2)
|- xxx.jar
|- config/
|- application.properties (3)
|- application.properties (4)
拓展: 通过–spring.config.location=XXX手动指定配置文件所在目录
cd target/
java -jar xxx.jar --spring.config.location=/data/config/springboot-sample/application.properties
# 或者只给目录. 注意: 一定要以斜线`/`结尾
java -jar app.jar --spring.config.location=/data/config/springboot-sample/