• 《SpringBoot篇》04.超详细多环境开发介绍


    陈老老老板
    说明:在整体的复习一遍知识,边复习边总结,基础真的重要,需要注意的地方都标红了,还有资源的分享. 一起加油。

    说明:
     什么是多环境?其实就是说你的电脑上写的程序最终要放到别人的服务器上去运行。每个计算机环境不一样,这就是多环境。常见的多环境开发主要兼顾3种环境设置,开发环境——自己用的,测试环境——自己公司用的,生产环境——甲方。因为这是绝对不同的三台电脑,所以环境肯定有所不同,比如连接的数据库不一样,设置的访问端口不一样等等。

    1.多环境开发(yaml单一文件版)

    ​ 那什么是多环境开发?就是针对不同的环境设置不同的配置属性即可。比如你自己开发时,配置你的端口如下:

    server:
      port: 80
    
    • 1
    • 2

    ​ 如何想设计两组环境呢?中间使用三个减号分隔开

    server:
      port: 80
    ---
    server:
      port: 81
    
    • 1
    • 2
    • 3
    • 4
    • 5

    ​ 如何区分两种环境呢?起名字呗

    spring:
    	profiles: pro
    server:
    	port: 80
    ---
    spring:
    	profiles: dev
    server:
    	port: 81
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    ​ 那用哪一个呢?设置默认启动哪个就可以了

    spring:
    	profiles:
    		active: pro		# 启动pro
    ---
    spring:
    	profiles: pro
    server:
    	port: 80
    ---
    spring:
    	profiles: dev
    server:
    	port: 81
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    ​ 就这么简单,再多来一组环境也OK

    spring:
    	profiles:
    		active: pro		# 启动pro
    ---
    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

    其中关于环境名称定义上述格式是过时格式,标准格式如下:

    spring:
    	config:
        	activate:
            	on-profile: pro
    
    • 1
    • 2
    • 3
    • 4

    总结

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

    2.多环境开发(yaml多文件版)

    ​ 将所有的配置都放在一个配置文件中,尤其是每一个配置应用场景都不一样,这显然不合理,于是就有了将一个配置文件拆分成多个配置文件的想法。拆分后,每个配置文件中写自己的配置,主配置文件中写清楚用哪一个配置文件就好了。

    主配置文件

    spring:
    	profiles:
    		active: pro		# 启动pro
    
    • 1
    • 2
    • 3

    环境配置文件

    server:
    	port: 80
    
    • 1
    • 2

    ​ 环境配置文件因为每一个都是配置自己的项,所以连名字都不用写里面了。那问题是如何区分这是哪一组配置呢?使用文件名区分。

    application-pro.yaml

    server:
    	port: 80
    
    • 1
    • 2

    application-dev.yaml

    server:
    	port: 81
    
    • 1
    • 2

    ​ 文件的命名规则为:application-环境名.yml。

    ​ 在配置文件中,如果某些配置项所有环境都一样,可以将这些项写入到主配置中,只有哪些有区别的项才写入到环境配置文件中。

    • 主配置文件中设置公共配置(全局),把一些都需要的写在主配置中。
    • 环境分类配置文件中常用于设置冲突属性(局部)。

    总结

    1. 可以使用独立配置文件定义环境属性

    2. 独立配置文件便于线上系统维护更新并保障系统安全性

    3.多环境开发(properties多文件版)

    ​ SpringBoot最早期提供的配置文件格式是properties格式的,这种格式的多环境配置也了解一下吧。

    主配置文件

    spring.profiles.active=pro
    
    • 1

    环境配置文件

    application-pro.properties

    server.port=80
    
    • 1

    application-dev.properties

    server.port=81
    
    • 1

    ​ 文件的命名规则为:application-环境名.properties。

    总结

    1. properties文件多环境配置仅支持多文件格式

    4.多环境开发独立配置文件书写技巧

    ​ 作为程序员在搞配置的时候往往处于一种分久必合合久必分的局面。开始先写一起,后来为了方便维护就拆分。对于多环境开发也是如此,下面给大家说一下如何基于多环境开发做配置独立管理,务必掌握。

    准备工作

    ​ 将所有的配置根据功能对配置文件中的信息进行拆分,并制作成独立的配置文件,命名规则如下

    • application-devDB.yml
    • application-devRedis.yml
    • application-devMVC.yml

    使用

    ​ 使用include属性在激活指定环境的情况下,同时对多个环境进行加载使其生效,多个环境间使用逗号分隔

    spring:
    	profiles:
        	active: dev
            include: devDB,devRedis,devMVC
    
    • 1
    • 2
    • 3
    • 4

    ​ 比较一下,现在相当于加载dev配置时,再加载对应的3组配置,从结构上就很清晰,用了什么,对应的名称是什么

    注意

    ​ 当主环境dev与其他环境有相同属性时,主环境属性生效;其他环境中有相同属性时,最后加载的环境属性生效

    改良

    ​ 但是上面的设置也有一个问题,比如我要切换dev环境为pro时,include也要修改。因为include属性只能使用一次,这就比较麻烦了。SpringBoot从2.4版开始使用group属性替代include属性,降低了配置书写量。

    spring:
    	profiles:
        	active: dev
            group:
            	"dev": devDB,devRedis,devMVC
          		"pro": proDB,proRedis,proMVC
          		"test": testDB,testRedis,testMVC
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    ​ 现在再来看,如果切换dev到pro,只需要改一下是不是就结束了?完美!

    总结

    1. 多环境开发使用group属性设置配置文件分组,便于线上维护管理

    5.多环境开发控制

    ​ 多环境开发到这里基本上说完了,最后说一个冲突问题。就是maven和SpringBoot同时设置多环境的话怎么搞。

    ​ 要想处理这个冲突问题,你要先理清一个关系,究竟谁在多环境开发中其主导地位。也就是说如果现在都设置了多环境,谁的应该是保留下来的,另一个应该遵从相同的设置。

    ​ maven是做什么的?项目构建管理的,最终生成代码包的,SpringBoot是干什么的?简化开发的。简化,又不是其主导作用。最终还是要靠maven来管理整个工程,所以SpringBoot应该听maven的。整个确认后下面就好做了。大体思想如下:

    • 先在maven环境中设置用什么具体的环境
    • 在SpringBoot中读取maven设置的环境即可

    maven中设置多环境(使用属性方式区分环境)

    <profiles>
        <profile>
            <id>env_devid>
            <properties>
                <profile.active>devprofile.active>
            properties>
            <activation>
                <activeByDefault>trueactiveByDefault>		
            activation>
        profile>
        <profile>
            <id>env_proid>
            <properties>
                <profile.active>proprofile.active>
            properties>
        profile>
    profiles>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    SpringBoot中读取maven设置值

    spring:
    	profiles:
        	active: @profile.active@
    
    • 1
    • 2
    • 3

    ​ 上面的@属性名@就是读取maven中配置的属性值的语法格式。

    总结

    1. 当Maven与SpringBoot同时对多环境进行控制时,以Mavn为主,SpringBoot使用@…@占位符读取Maven对应的配置属性值
    2. 基于SpringBoot读取Maven配置属性的前提下,如果在Idea下测试工程时pom.xml每次更新需要手动compile方可生效

    总结:springboot多环境开发介绍,希望对您有帮助,感谢阅读

    结束语:裸体一旦成为艺术,便是最圣洁的。道德一旦沦为虚伪,便是最下流的。
    勇敢去做你认为正确的事,不要被世俗的流言蜚语所困扰。

  • 相关阅读:
    SpringBoot-25-整合持久层-通过Spring Boot starter 整合 Druid
    Flink UDF函数
    URLDNS利用链分析
    清华学霸告诉你:如何自学人工智能?
    Vue tree树状结构数据转扁平数据
    FPGA零基础学习:数字电路中的时序逻辑
    #gStore-weekly | SPARQL 解析(上)
    spring 事务失效的 12 种场景
    不要再说离群点难观测,来学学这种特征异常检测的高效方法
    再登GitHub下载榜首!阿里大牛分享内部漫谈程序员职场修炼手册
  • 原文地址:https://blog.csdn.net/weixin_47343544/article/details/126849966