springboot多环境开发
springboot多环境开发介绍
在做springboot开发的时候有多种环境,如开发环境,测试环境,生产环境等,每个环境的yaml配置不同,如端口号等。这就需要针对不同的环境配置不同的属性。具体方法有单一文件版,多文件版等。
1.yaml单一文件版
单一文件很简单,用三个短横线隔开不同环境即可,公共的环境配置放在最上面
spring:
profiles:
active: pro
datasource:
druid:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC
username: root
password: 1234
mybatis-plus:
global-config:
db-config:
table-prefix: tbl_
id-type: auto
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
---
spring:
config:
activate:
on-profile: dev
server:
port: 81
---
spring:
config:
activate:
on-profile: pro
server:
port: 80
---
spring:
config:
activate:
on-profile: test
server:
port: 82
2.多文件版
2.1 yaml多文件版
单一文件实现多环境开发虽然图一时之快,但是维护起来是有麻烦的,也不合理。将每个环境定义为一个文件,则只需要关注该阶段的环境文件即可,实现了去耦合。实现起来也很简单,将每一部分放在一个文件即可,命名一般是“application-***.yml”。目录结构和文件内容如下所示
值得注意的主配置文件指定是根据文件名的后缀诸如“dev”来判断的。
2.2 properties多文件版
properties多文件版和yaml多文件版几乎一样,唯一的区别是properties的格式略有不同,且properties仅支持多文件版。具体代码内容如下:
主配置文件
spring.profiles.active=pro
环境配置文件
application-pro.properties
server.port=80
application-dev.properties
server.port=81
application-test.properties
server.port=82
3.多环境分组管理
多环境不仅按周期分为dev,pro,test等,在每个周期还会按功能分为不同的配置文件,目录结构如下入所示
这时候只需要在主配值文件中使用group属性即可实现融合每个周期的所有配置,代码如下:
spring:
profiles:
active: dev
group:
"dev": devDB,devMVC
"pro": proDB,proMVC
"test": testRedis
4.多环境开发控制
上面已经实现的多环境开发的全部功能,但是有一个问题是上面所有的配置都是springboot的yml或者properties文件实现的,maven也可以设置多环境,这就产生了冲突。那么以谁为主呢?答案是maven。maven是管理整个工程的,项目的各种依赖到生命周期都由它管理,所以Springboot应该听maven的。那么接下来只需要用Springboot读取maven的配置即可,代码如下:
pom.xml文件中配置多环境
<profiles>
<profile>
//每个环境都要由一个id,可以随意取,但是最好要见名知意
<id>env_dev</id>
<properties>
//这里就是环境名称了,springboot读取的就是这里
<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>
SpringBoot中读取maven设置值(主配置文件中)
spring:
profiles:
//这里即可引用maven生效的环境名
active: @profile.active@
group:
"dev": devDB,devMVC
"pro": proDB,proMVC
"test": testRedis
打包后可以看到主配值文件中生效的是dev
值得一提的是旧版本的idea有一个bug,就是运行后读取到的配置名是之前缓存的,这个bug在新版本的idea中已经解决。如果出现这种问题,解决方案是用maven运行工程的compile生命周期后再运行即可。
5.总结
springboot多环境开发总的来说就是配置一个主文件application.yml 然后按周期分为若干个组,然后每个组有一个主文件和多个功能文件,命名方式都是 application-###.yml 格式。在主配置文件中用active属性选择组的主文件,group属性则将每个组按照键值对的形式表示出来即可。如果maven也有多环境配置,则用 @profile.active@ 读取。