文章目录
- 一. 前言
- 二. 单文件版多环境配置
- 三. 多文件版多环境配置
- 四. 多环境开发配置技巧
- 五. 多环境配置分组管理
一. 前言
在日常开发中我们使用的环境可能会不一样,比如开发环境
,测试环境
,生产环境
,那么这些环境对应的配置也会不一样,如果环境一切换就要更改一套新的配置那么确实过于复杂了,因此Springboot也给我们提供解决方案。
二. 单文件版多环境配置
在单个application.yml配置文件中我们可以使用 ---
分割环境配置,那么如何区分环境呢? 在单个配置文件中我们可以使用 profiles 为环境配置命名,如下案例:
# 应用环境
# 公共配置
spring:
profiles:
active: dev # 要使用的环境配置
---
# 设置环境
# 生产环境
spring:
profiles: pro # 环境名
server:
port: 80
---
# 开发环境
spring:
profiles: dev
server:
port: 81
---
# 测试环境 新写法跟上面的效果一样
spring:
config:
activate:
on-profile: test # 环境名
server:
port: 82
启动时Springboot会选择指定的环境配置,其他的环境配置将会被忽略,可以在公共配置中写上环境中一样的配置这样可以减少代码的冗余,在修改配置时也会带来极大的便利吗,但是其实这种配置方式比较过时,下面给大家介绍比较流行的做法。
三. 多文件版多环境配置
上面小编介绍了单文件版的多环境开发,但是这种配置方式对一些配置的私密性不是很友好,代码量都叠加在一个文件这样也不方便代码的阅读,因此有了我们下面要介绍的多文件版环境配置。
以 [配置文件名]-[环境名].[文件后缀]
的方式命名配置文件,可以在resources目录下创建多个这样的文件如下:
以 application.yml 作为我们的主配置文件,其余的配置文件作为我们的环境配置文件,将不同的环境配置在其中,对于主配置文件:
# 应用环境
spring:
profiles:
active: test #选择的环境配置
通过active
属性指定生效的环境配置,其实这种方式就是将上一种方式在文件的基础上进行拆分。这样在开发完成后我们开发人员只要将主配置文件修改好,再由项目经理添加生产的配置文件即可,对一些私密的信息起到了很好的保护作用。
四. 多环境开发配置技巧
在工作中我们对换机的区分不单单可以针对环境,我们还可以以功能来进行环境的区分,如数据库相关的配置文件起一个名字 application-devDB.yml ,缓存相关的配置文件起一个名字application-devRedis.yml 等等。
而在进行指定这些配置时使用include)属性在激活指定环境的情况下,同时对多个环境进行加载使其生效,多个环境间使用逗号分隔,如下:
spring:
profiles:
active:dev
include:devDB,devRedis,devMVC
对于include属性的属性配置顺序,配置的越前面的权重越高,如果属性冲突以权重更高的配置为主
五. 多环境配置分组管理
但是在Springboot2.4后其实上面这种配置方式也有点过时了,2.4版本后将include
属性换成了group
属性,通过分组来进行多环境的配置。
spring:
profiles:
active: dev # 指定组名决定生效的环境
group:
"dev": devDB,devMVC # 设置分组 这里dev是组名
"pro": devDB,proMVC
在开发的过程中有时我们会通过配置maven的配置文件来实现开发时的环境管理,其实Springboot是依赖于Maven来进行启动的。
<!--设置多环境 maven 和springboot的环境重复的话 以maven为主-->
<profiles>
<profile>
<id>env_dev</id>
<properties>
<profile.active>dev</profile.active>
</properties>
<!--设置生效环境-->
<activation>
<!-- 设置默认启动使用的环境-->
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>env_pro</id>
<properties>
<profile.active>pro</profile.active>
</properties>
</profile>
</profiles>
读取Maven依赖配置文件中的开发环境,实现POM文件和Springboot配置文件的一致性。
spring:
profiles:
active: @profile.active@ #读取maven里面配置的启动环境
group:
"dev": devDB,devMVC
"pro": devDB,proMVC
这样就是实现了Maven和Springboot的环境统一,有时因为IDEA缓存的问题会出现配置不生效我们可以执行一下下Maven生命周期中的compile重新编译加载配置文件的内容,再重新启动项目。