1 配置的读取顺序
1.1 application配置文件的读取顺序
读取顺序由内而外: (1) - (2) - (3) - (4),后读取到会覆盖先读取到,所以优先级正好反过来: (4) - (3) - (2) - (1)
/optmy-spring-boot-project.jarapplication.yml (1)/configapplication.yml (2)application.yml (3)/configapplication.yml (4)
说明:(1)和(2)通常放在/src/resource目录下面,打包的时候会自动拷贝到jar包的根目录下面
1.2 application-{profile}配置的读取顺序
通过设置spring.profiles.active=xxx的方式来指定环境时,是所有的application配置读取完后再读取application-{profile}.yml,所以application-{profile}的优先级整体高于application.yml
另外可以利用yaml的---
的文档块方式来区分不同的profile
spring:profiles:devserver:port: 8081
---
spring:profiles:prodserver:port: 80
1.3 配置的整体读取顺序
注意:读取顺序越后,会覆盖之前读区到的值,优先级也就更高
读取顺序 | 读取位置 |
---|---|
1 | jar包内部/application.yml |
2 | jar包内部/config/application.yml |
3 | jar包外部/application.yml |
4 | jar包外部/config/application.yml |
5 | jar包内部/application-profile.yml |
6 | jar包内部/config/application-profile.yml |
7 | jar包外部/application-profile.yml (可通过spring.config.location指定其他路径) |
8 | jar包外部/config/application-profile.yml (可通过spring.config.location指定其他路径) |
9 | 系统环境变量 |
10 | 用户环境变量 |
11 | JVM环境变量 (java -Dkey=value) |
12 | 程序执行参数 (java -jar --key=value) |
2 其他配置文件的导入
2.1 通过spring.profiles.include导入
application-mysql.yml
application-redis.yml
application.yml
spring:profiles:include: mysql,redis
2.2 通过spring.config.import导入(推荐)
mysql.yml
redis.yml
application.yml
spring:config:import: - classpath:mysql.yml- classpath:redis.yml
推荐的理由是虽然只是通过classpath指定了文件的路径,但是在这个基础上还可以通过spring.profiles.active=xxx来自动加载对应环境的配置:
mysql.yml
mysql-dev.yml
redis.yml
redis-dev.yml
application.yml
spring:config:import: - classpath:mysql.yml- classpath:redis.yml
当指定spring.profiles.active=dev时,mysql-dev.yml和redis-dev.yml的内容会自动读入,并且覆盖mysql.yml和redis.yml的值。
3 配置随机值
# 随机整数
number-int:${random.int}# 小于100
number-100:${random.int(100)}# 大于等于1, 小于10
number-1-10:${random.int[1,10]}# 随机长整数
number-long:${random.long}# 小于10000000
number-long-10000000:${random.long(10000000)}# 大于等于10000000, 小于90000000
number-long-10000000-90000000:${random.long[10000000,90000000]}# 随机UUID
random-uuid:${random.uuid}# 随机md5
random-md5:${random.value}. #.后面为任意字符或者不填