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


    🌕博客x主页:己不由心王道长🌕!
    🌎文章说明:一文彻底吃透·SpringBoot多环境开发🌎
    ✅系列专栏:SpringBoot
    🌴本篇内容:对SpringBoot的多环境开发需求做一个总结🌴
    ☕️每日一语:情商最低的一种人,就是明明可以好好说的话,非要用最令人讨厌的方式表达。☕️
    🕤作者详情:作者是一名双非大三在校生,喜欢Java,欢迎大家探讨学习,喜欢的话请给博主一个三连鼓励。🕤
    🚩 交流社区:己不由心王道长(优质编程社区)

    前言

    在我们的开发中,必然不会只用到单个环境开发。整个软件的开发分为:开发——>测试——>生产(即给用户使用)。
    在这整个过程中用到的配置必然不一样,例如我们接了银行一个活,要对底层数据库进行调试;银行管理层肯定不会告诉你密码的。
    这种情况下就要求分环境,开发人员自己有一套环境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中设置环境

    <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>
            <profile>
                <id>env_test</id>
                <properties>
                    <profile.active>test</profile.active>
                </properties>
            </profile>
        </profiles>
    
    • 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 New对象分配内存流程
    树控件的使用
    宏观角度认识递归之 Pow(x,n) 问题
    计算物理专题----随机游走实战
    视频化全链路智能上云?一文详解什么是阿里云视频云「智能媒体生产」
    java计算机毕业设计西安市城市绿地管理系统源程序+mysql+系统+lw文档+远程调试
    艾美捷RPMI-1640培养基L-谷氨酰胺的参数和配方
    Ubuntu 20.04安装绿联PL2303串口驱动
    Less的基本语法
    idea插件之Smart Tomcat
  • 原文地址:https://blog.csdn.net/qq_63992577/article/details/127600673