多环境开发(yaml单一文件版)
我们可以针对不同的环境设置不同的配置
如:
# 使用的环境
spring:
profiles:
active: pro
---
# 第一个环境
spring:
config:
activate:
on-profile: pro
server:
port: 81
---
# 第二个环境
spring:
config:
activate:
on-profile: dev
server:
port: 82
---
# 第三个环境
spring:
config:
activate:
on-profile: test
server:
port: 83
如上,设置了三个不同的环境,目前使用的时第一个环境
使用环境和配置环境之间都需要使用三个-来分隔
定义环境的格式:
spring:
config:
activate:
on-profile: pro # 这里是该环境的名称
# 这里是该环境的具体配置
使用环境的格式:
spring:
profiles:
active: pro # 这里的名称为使用的环境的名称
一般情况下,配置的各种环境在yml文件的最后面,且不同环境配置的一般是冲突的信息
所有环境共有的相同的配置可以直接配置在最上面,可以正常使用
多环境开发(yaml多文件版)
如果各种环境的配置都放在同一个文件下,那么在安全性和维护方面都会比较困难
因此可以将不同环境的配置放在不同的tml文件中
文件的命名规则:application-环境名.yml
如:
主配置文件
spring:
profiles:
active: pro # 启动pro
环境配置文件
application-rop.yaml
server:
port: 80
application-dev.yaml
server:
port: 81
如上,主配置文件中设置公共配置,环境配置文件中设置冲突属性
多环境开发(properties多文件版)
properties类型的多环境开发基本和yml一样,只需要在格式上进行更改
主配置文件
spring.profiles.active=pro
环境配置文件
application-pro.properties
server.port=80
application-dev.properties
server.port=81
注:properties文件多环境配置仅支持多文件格式
多环境开发独立配置文件书写技巧
在开发中,一般会将不同功能的配置配置到不同的文件中
将所有的配置根据功能对配置文件中的信息进行拆分,并制作成独立的配置文件,命名规则如下
- application-devDB.yml
- application-devRedis.yml
- application-devMVC.yml
即application-环境名 + 功能 + .yml
之后就可以在主配置文件中使用include属性激活指定环境,同时对多个环境进行加载使其生效,多个环境之间用逗号分隔
spring:
profiles:
active: dev
include: devDB,devRedis,devMVC
如上代表加载dev环境的同时,加载对应的3组配置
若这些环境中存在相同的属性,则后加载的会覆盖先加载的,且dev会最后加载
加载顺序:devDB->devRedis->devMVC->dev
即当主环境dev与其他环境有相同属性时,主环境属性生效;其他环境中有相同属性时,最后加载的环境属性生效
在SpringBoot2.4版本,更新了一个叫做group的属性可以代替include属性
group属性可以将一些环境设置为一个环境组
spring:
profiles:
active: dev
group:
"dev": devDB,devRedis,devMVC
"pro": proDB,proRedis,proMVC
"test": testDB,testRedis,testMVC
如上,最终加载的就是dev环境和另外3组配置
注:
1.使用group时,若这些环境中存在相同的属性,仍为后加载的覆盖先加载的
但是此时主环境dev会变成最先加载的
加载顺序:dev->devDB->devRedis->devMVC
2.分组的环境命名是随意的,如pro组可以有devDB:
spring:
profiles:
active: dev
group:
"dev": devDB,devRedis,devMVC
"pro": devDB,proRedis,proMVC
如上,可以正常运行,因此group组中的环境可以随意组合
多环境开发控制
在开发中,Maven也有多环境的开发
那么当Maven的环境和SpringBoot环境冲突时,由于SpringBoot是依靠maven来管理工程的,因此SpringBoot的环境应该跟随Maven的环境
要实现上述情况,应:
maven中设置多环境(使用属性方式区分环境)
<build>
<resources>
<resource>
<!-- 指定配置文件所在的resource目录 -->
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
<profiles>
<profile>
<id>env_dev</id>
<properties>
<environment>dev</environment>
</properties>
<activation>
<activeByDefault>true</activeByDefault> <!--默认启动环境-->
</activation>
</profile>
<profile>
<id>env_pro</id>
<properties>
<environment>pro</environment>
</properties>
<activation>
<activeByDefault>false</activeByDefault> <!--默认启动环境-->
</activation>
</profile>
</profiles>
如上,需要在build标签指定配置文件所在的resource目录
然后再pom.xml中配置多个环境
SpringBoot中读取maven设置值
spring:
profiles:
active: @environment@
group:
"dev": devDB,devMVC
"pro": devDB,proMVC
需要使用 "@属性名@" 的形式来获取maven中配置的属性值
7802

被折叠的 条评论
为什么被折叠?



