一、多环境开发 —— yaml格式
单配置文件、多环境(共享配置文件)
- 配置文件中,使用
---
分隔不同的环境,从而实现多环境 - 划分出一块环境,作为设置公共配置的应用环境,在当中指定应用哪个环境中的属性配置。
# 这里是公共配置 # 设置应用哪个环境(这里应用dev环境) spring: profiles: active: dev --- # 假设这是生产环境 # 过时格式设置环境 spring: profiles: pro # 具体参数设置 server: port: 80 --- # 假设这是开发环境 # 标准格式设置环境 spring: config: activate: on-profile: dev # 具体参数设置 server: port: 81 --- # 假设这是测试环境 # 推荐使用此格式(标准格式) spring: config: activate: on-profile: test # 具体参数设置 server: port: 82
小结
:
- 多环境开发需要设置若干种常用的环境,例如开发环境、生产环境、测试环境
- yaml格式中设置多环境,使用
---
区分环境,设置边界 - 每种环境的区别在于加载的配置属性不同
- 启动某种环境时,需要指定启动时使用的环境
多配置文件、多环境(独立配置文件)
- 主配置文件中设置公共配置 —— 全局
- 环境分类配置文件中常用于配置冲突属性 —— 局部
- 主启动配置文件
application.yml
:
# 设置应用哪个环境(这里应用dev环境) spring: profiles: active: dev
- 使用
include属性
在激活指定环境的情况下,可以同时对多个环境进行加载使其生效,多个环境间使用逗号分隔:
spring: profiles: active: dev include: test,pro # 这样书写,文件的加载顺序是:test 》 pro 》 dev # 当主环境dev与其他环境有相同属性时,主环境属性失效;其他环境中有相同的属性时,最后加载的环境属性生效
- 环境分类配置文件
application-pro.yml
:
server: port: 80
- 环境分类配置文件
application-dev.yml
:
server: port: 81
- 环境分类配置文件
application-test.yml
:
server: port: 82
小结
:
- 可以使用独立配置文件定义环境属性
- 独立配置文件便于线上维护更新并保障系统安全性
二、多环境开发 —— properties格式
- properties文件多环境配置仅支持多文件格式
- 主配置文件中设置公共配置 —— 全局
- 环境分类配置文件中常用于配置冲突属性 —— 局部
- 主启动配置文件
application.properties
:
# 设置应用哪个环境(这里应用test环境) spring.profiles.active=test
- 环境分类配置文件
application-pro.properties
:
server.port=80
- 环境分类配置文件
application-dev.properties
:
server.port=81
- 环境分类配置文件
application-test.properties
:
server.port=82
三、多环境分组管理
- 使用
include属性
在激活指定环境的情况下,可以同时对多个环境进行加载使其生效,多个环境间使用逗号分隔 - 当主环境dev与其他环境有相同属性时,主环境属性失效;其他环境中有相同的属性时,最后加载的环境属性生效
👇👇👇
- 从SpringBoot2.4版本开始使用
group属性
代替include属性,降低了配置书写量 - 使用
group属性
定义多种主环境与子环境的包含关系
- (分组示例)根据功能对配置文件中的信息进行拆分,并制作成独立的配置文件,命名规则如下:
- application-devDB.yml
- application-devRedis.yml
- application-devMVC.yml
spring: profiles: active: dev group: "dev": devDB,devRedis,devMVC "pro": proDB,proRedis,proMVC "test": testDB,testRedis,testMVC # 这里启动dev组,配置文件扫描顺序是:dev 》 devDB 》 devRedis 》 devMVC # 当主环境dev与其他环境有相同属性时,主环境属性失效;其他环境中有相同的属性时,最后加载的环境属性生效
多环境开发使用group属性设置配置文件分组,便于线上维护管理
四、多环境开发控制
Maven 与 SpringBoot 多环境兼容
- Maven中设置多环境属性
<profiles> <!--application-dev.yml配置文件配置的环境--> <profile> <id>dev_env</id> <properties> <profile.active>dev</profile.active> </properties> <!--使用activation标签,配置activeByDefault的默认启动配置--> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> <!--application-pro.yml配置文件配置的环境--> <profile> <id>pro_env</id> <properties> <profile.active>pro</profile.active> </properties> </profile> <!--application-test.yml配置文件配置的环境--> <profile> <id>test_env</id> <properties> <profile.active>test</profile.active> </properties> </profile> </profiles>
- SpringBoot中引用Maven属性
- 使用
@@
符号将Maven属性括起来表示引用
spring: profiles: active: @profile.active@ # 因为Maven中为dev配置了activeByDefault的默认启动配置,这里代表dev组 group: "dev": devDB,devRedis,devMVC "pro": proDB,proRedis,proMVC "test": testDB,testRedis,testMVC
- 执行Maven打包指令,生成boot工程打包的
.jar文件
mvn clean mvn package
小结
:
- 当Maven和SpringBoot同时对多环境进行控制时,以Maven为主,SpringBoot使用
@...@
占位符获取Maven对应配置属性值 - 基于SpringBoot读取Maven配置属性的前提下,如果IDEA下测试工程时pom.xml每次更新需要手动compile方可生效