多环境配置

9/30/2022

# 1、背景与问题

虽然spring-boot与spring-cloud家族有默认的parent pom,但是由于spring-boot和spring-cloud系列更新太过频繁,所以对于一个技术团队而言,设置自己的独有的parent才能做到整个项目亦或整个团队的版本统一,技术统一。

# 2、架构与思想

# 2.1、MAVEN BOM

如果你只听过maven的pom,但是你没听过maven的bom的话,而且你还在用spring技术体系的话,那么你非常强烈建议你去了解bom。
使用BOM可以让使用者在子pom.xml声明依赖的时不需要指定版本号,最重要的是可以解决依赖冲突。
而不幸的是 spring 系列相关的依赖经常冲突,不用bom能行么?

# 2.2、依赖版本统一定义版本

在parent的pom.xml文件里定义了所有的版本变量,这样可以只关注此区域,不用再看下面,因为下面<dependencies>节点里很长,翻阅起来很累又不易查看,而且随着系统的变大也会越来越长,但是<properties>节点不会。

  <properties>
        <java.version>1.8</java.version>
        <springboot.version>2.7.5</springboot.version>
        <spring-mock.version>2.0.8</spring-mock.version>
        <mybatis-plus.version>3.5.2</mybatis-plus.version>
        <p6spy.version>3.8.6</p6spy.version>
        ...
</properties>
1
2
3
4
5
6
7
8

# 三、多环境

# 3.1、maven profile多环境

笔者认为所有的项目都应该有以下四个环境:

  • 开发环境 (dev,用于写代码)
  • 测试环境 (test,测试人员测试)
  • 预发布环境(pre, 真实的数据,最真实的生产环境)
  • 生产环境(prod, 生产环境)

默认为dev环境,即开发环境。

配置如下:

 <profiles>
        <profile>
            <id>dev</id>
            <properties>
                <profiles.active>dev</profiles.active>
            </properties>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <profile>
            <id>sit</id>
            <properties>
                <profiles.active>sit</profiles.active>
            </properties>
        </profile>
        <profile>
            <id>pre</id>
            <properties>
                <profiles.active>pre</profiles.active>
            </properties>
        </profile>
        <profile>
            <id>prod</id>
            <properties>
                <profiles.active>prod</profiles.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
25
26
27
28
29

# 3.2、目录resources

因为使用了maven profile,所以必须在resources目录下建立不同环境的配置文件夹,如下图。

--------\src\main\resources
--------\src\main\resources\dev
--------\src\main\resources\test
--------\src\main\resources\pre
--------\src\main\resources\prod

1
2
3
4
5
6

# 3.3、 打包配置build

maven profile的打包核心是对配置文件的过滤,如下

<finalName>${profiles.active}-${project.name}</finalName>
<resources>
    <resource>
        <filtering>false</filtering>
        <directory>src/main/resources</directory>
        <excludes>
            <exclude>dev/*</exclude>
            <exclude>test/*</exclude>
            <exclude>pre/*</exclude>
            <exclude>prod/*</exclude>
        </excludes>
    </resource>

    <resource>
        <directory>src/main/resources/${profiles.active}</directory>
        <filtering>true</filtering>
        <includes>
            <include>*.yaml</include>
        </includes>
    </resource>

    <resource>
        <directory>src/main/resources/${profiles.active}</directory>
        <filtering>false</filtering>
        <includes>
            <include>*.*</include>
        </includes>
    </resource>
</resources>	
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
27
28
29

# 联系我们

1024创新实验室-主任:卓大 (opens new window),混迹于各个技术圈,研究过计算机,熟悉点 java,略懂点前端。
1024创新实验室(河南·洛阳) (opens new window) 致力于成为中原领先、国内一流的技术团队,以技术创新为驱动,合作各类项目。

加 主任 “卓大” 微信
拉你入群,一起学习
关注 “小镇程序员”
分享代码与生活、技术与赚钱
请 “1024创新实验室” 喝咖啡
支持我们的开源与分享

告白气球 (钢琴版)
JESSE T