Spring Boot 2.4以上版本中,对配置的加载机制做了较大的调整。就个人学习来讲做一个总结。
## 先来看看2.4版本以前的yaml配置spring:
profiles:
active: "dev"
---
spring:
profiles: "dev"
include:"dev-db,dev-mq"
---
spring:
profiles: "dev-mq"
name: dev-mq.sunwater.cn
server:
port: 8001
---
spring:
profiles: "dev-db"
name: dev-db.sunwater.cn
server:
port: 8001
---
spring:
profiles: "test"
name: test.sunwater.cn
server:
port: 8001
---
spring:
profiles: "prod"
name: prod.sunwater.cn
server:
port: 8001
第一个spring.profiles.active: dev,代表默认激活dev配置
第二段dev配置中使用了spring.profiles.include来引入其他配置信息,这里模拟一下一个是dev的db配置,一个是dev的mq配置。在2.3和之前版本的时候,我们通常就是这样来分组配置不同中间件的。
spring:
profiles:
active: dev
group:
"dev": "dev-db,dev-mq"
"prod": "prod-db,prod-mq"
---
spring:
config:
activate:
on-profile:
- dev-mq
name: dev-mq.sunwater.cn
server:
port: 8001
---
spring:
config:
activate:
on-profile:
- dev-db
name: dev-db.sunwater.cn
---
spring:
config:
activate:
on-profile:
- test
name: test..sunwater.cn
server:
port: 8002
---
spring:
config:
activate:
on-profile:
-prod
name: prod.sunwater.cn
server:
port: 8003
我们可以看到在2.4版本的配置中,不同环境的配置定义都在第一段默认配置中了,所有的环境定义都转移到了spring.profiles.group的key字段(上面配置了dev),value字段则代表了每个环境需要加载的不同配置分组。
实际应用中的用法 我们也可以将spring.profiles.active写入yaml配置中,这样的作用就可以指定默认使用某一个环境的配置,通常我们可以设置成开发环境,这样有利于我们平时的开发调试,而真正部署到其他环境的时候则多以命令参数激活为主。例如:yaml文件就像前面的示例一样
在生产环境中,我们可以使用加参数运行的方法来运行程序:
java -jar example.jar -D spring.profiles.active=prod



