【SpringBoot】一文吃透SpringBoot多环境开发

256 阅读9分钟

前言 在我们的开发中,必然不会只用到单个环境开发。整个软件的开发分为:开发——>测试——>生产(即给用户使用)。 在这整个过程中用到的配置必然不一样,例如我们接了银行一个活,要对底层数据库进行调试;银行管理层肯定不会告诉你密码的。 这种情况下就要求分环境,开发人员自己有一套环境dev,测试人员给人家老板去提供安装、上线测试必然又是另一套(不然你运维直接开发人员全包了得了?),到上线了,老板肯定又是自己的一套环境。密码这种私密性极高的东西必然不会告诉我这种底层程序员。

yml版多环境开发 这里直接开发,创建项目太小儿科了,就不浪费时间了。

yml版单文件多环境 配置文件:

#应用环境 #公共配置 spring: profiles: active: dev


#设置环境 #生产环境 spring: profiles: pro server: port: 80

#开发环境 spring: profiles: dev server: port: 81

#测试环境 spring: profiles: test server: port: 82

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 我们在上面配置了四个环境,分别是应用环境,生产环境、开发环境和测试环境。应用环境是公共环境,是用来声明这个配置文件到底使用了哪个环境作为应用的环境。每个环境之间用三个减号分割开。我们可以在每个环境中进行自己的环境配置。在active中后声明使用的环境的名称。

下面进行测试: 在上面中我们选择的是dev,即生产环境,端口号为81,测试结果为:

这就正确了吗?不急,把应用环境改为test再测试玩玩;

结果依然是正确的。所以我们完成了单文件的yml多环境测试。

问题来了,你这几个环境全部都在一个文件里,那么刚才说的老板的密码保密性在哪里呢? 人家老板不干了。老板要是不干了,那可不行,所以我们满足老板需求,请阅读:yml版多文件多环境

yml版多文件多环境 从上面我们知道,单文件多环境配置是存在局限性的,就是各种时期的人员没有隐私嘛,人老板密码能让你看。所以这里我们就使用SpringBoot提供的yml版多文件多环境开发,让老板穿上底裤!

说着挺玄乎的,难不难?不难!多环境多文件嘛,那就新建文件

application.yml就是我们的应用环境。怎么用呢?看下面 application-dev.yml:

server: port: 80 1 2 application-pro.yml:

server: port: 81 1 2 application-test.yml:

server: port: 82 1 2 无非就是一个文件一个环境,到你的时候就自己配你的环境,这样老板就又隐私了。

在application.yml中配置:

spring: profiles: active: test

1 2 3 4 看到没有,其实就是把一个配置文件分开为了三个配置文件,其他的用法基本一样,而且分开还实现了解耦,以后的多环境开发其实就是使用多文件多环境。

测试:发现8082端口启动,正是我们想看到的

properties版多环境开发 其实这个版本跟上面的版本大同小异,大同是用法相同,小异其实就是properties和yml语法上的不同。 这里我没有把刚才的配置文件删除,而是创建一个文件夹,把它们移动到里面。

还是创建四个配置文件

还是一样进行配置文件的编写 application-dev.properties:

server.port=80 1 application-pro.properties:

server.port=81 1 application-test.properties:

server.port=82 1 application.properties:

#在这里配置需要启用的环境文件 spring.profiles.active=pro 1 2 测试:

结果还是正确 可以看到,两个不同的方式,但是方法都差不多,只有语法和后缀上的差异!!!

问题又来了,我们学会了多环境开发没错,老板也舒服了,有隐私了。 如果出现以下情况,请思考:

server: port: 80 spring: mvc: view: prefix: / suffix: /*.html datasource: druid: driver-class-name: url: username: password:

mybatis-plus: check-config-location: false

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 这些怎么样?你说还行,可我们都知道,开发项目的时候,虽然SpringBoot简化了很多的配置,但还是有很多需要我们自己动手去配置的,如果全都配置在一个文件,难以想象。

多环境分组管理 在上面我们发现了端倪,即在开发环境中,我们不会把所有的配置都放在一个配置中,那样既不美观,也不利于维护。 所以我们要学习多环境的分组管理。 分组是怎么进行的?按照功能拆分,你数据库的负责底层数据库的,你mvc负责视图和控制。 且看下面,刚才在学习多环境的properties格式时,我没有把yml文件删除掉,而是保存起来,这个时候再把它拉出来让它干活!删除properties文件,开发中一般使用yml格式。

这样,我们都是码农,当然使用dev.yml,我们刚才看见了很多配置混合在一起,如下:

server: port: 80 spring: mvc: view: prefix: / suffix: /*.html datasource: druid: driver-class-name: url: username: password:

mybatis-plus: check-config-location: false

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 我就分别创建application-devMysql.yml、application-devMybatis.yml、application-devMvc.yml

application-devMysql.yml:

spring: datasource: druid: driver-class-name: url: username: password: 1 2 3 4 5 6 7 application-devMybatis.yml:

mybatis-plus: check-config-location: false 1 2 application-devMvc.yml:

spring: mvc: view: prefix: suffix: 1 2 3 4 5 application-dev.yml:

server: port: 8081

1 2 3 然后在应用环境中配置,怎么配置呢?接着看 application.yml

spring: profiles: active: dev include: devMvc,devMybatis,devMysql 1 2 3 4 在应用环境中配置了dev,使用include表示这个配置文件包括include后面的那几个文件。

测试:

结果没有意外正确,这时我们还要想一个问题,我们使用了多分组管理,这挺好的,可是如果我把active的dev改为test,即开发阶段过度到测试,那么decMvc也得改,以dev开头的都得改,很明显这是不可忍受的。

解决方案:SpringBoot给我们提供了解决方案,SpringBoot提供了group属性,这一看就是为了分组管理而来的。 使用:

使用group进行分组管理,可以设置分组类别,只要在active后添加group的分组,如dev,即可默认配置了“dev”后的所有配置文件。

到此,我们的多环境开发要告一段落了,但是别急,我们不妨再想一个问题,到底是SpringBoot依赖maven运行,还是maven依赖SpringBoot运行呢? 这不是废话嘛,当然是SpringBoot依赖maven运行了。好,那么如果在SpringBoot中做了配置,又在maven做进行同样的配置,这个时候怎么办?要是产生冲突怎么办呢?这就是下一节要讲的多环境开发控制。

多环境开发控制 在上面我们已经完成了多环境开发的基本步骤,现在就差一点,我就直接给出答案,就是maven和SpringBoot之间的配置整合,要弄懂这个,我们又必须知道是maven主导SpringBoot。 maven是做什么的?项目构建管理的,最终生成代码包的,SpringBoot是干什么的?简化开发的。简化,又不是其主导作用。最终还是要靠maven来管理整个工程,所以SpringBoot应该听maven的。整个确认后下面就好做了。大体思想如下:

先在maven环境中设置用什么具体的环境 在SpringBoot中读取maven设置的环境即可 第一步:在maven中设置环境

env_dev dev true env_pro pro env_test test 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 这里是不是很熟悉,profiles嘛,配置文件,就是下面的1.

第二步:在配置文件中读取,就是在上面的active中读取,用@profile.active@即可读取maven中默认的启动环境,以后开发要使用什么环境,直接在maven中配置即可。

spring: profiles: active: @profile.active@ group: "dev": devMvc,devMybatis,devMysql "test": "pro":

include: devMvc,devMybatis,devMysql

1 2 3 4 5 6 7 8 9 10 测试:这里的默认启动环境是dev,dev端口号是8081

很遗憾,启动失败,为什么失败呢?错误信息如下:

解释:

扫描下一个令牌时 找到无法启动任何标记的字符“@”。(不要将@用于缩进) 在“读者”第3行第13列中: 活动:@profile.active@

它告诉我们说的是我们在应用配置文件中的@profile.active@无法启动任何标记。

解决方案:解决方法:在profiles中勾选环境之后,点一下 Road ALL Maven Projects。

再测试:

还有一点,比如这时我把maven配置中profiles默认开启更改,改为默认启动test,此时test的端口号为8082

测试:

可以看到还是默认启动的是dev。我们怀疑会不会是上次生成的文件没有清理,这里clean再测试一下:

我们看到并不管用,这时候怎么办?采用预编译即complie

即可成功运行;

总结

  1. 多环境开发需要设置若干种常用环境,例如开发、生产、测试环境
  2. yaml格式中设置多环境使用—区分环境设置边界
  3. 每种环境的区别在于加载的配置属性不同
  4. 启用某种环境时需要指定启动时使用该环境
  5. 多环境开发使用group属性设置配置文件分组,便于线上维护管理

文章知识点与官方知识档案匹配,可进一步学习相关知识 Java技能树首页概览83444 人正在系统学习中