SpringBoot与Maven多环境整合

Maven / 2021-12-22

SpringBoot与Maven多环境整合

导读

  • 文章转载自【码猿技术专栏】
  • 在中大型企业做过开发都知道,开发任何的项目至少都需要三个环境,分别是开发环境,测试环境,生产环境。环境不同意味着配置也是不相同的,比如数据库,文件路径等等配置,那么如何解决这么多环境整合在一起既不混乱又能很优雅呢?今天就来讲讲SpringBoot如何实现多环境整合的。
  • SpringBoot对多环境整合有着自己的实现,但是在使用Maven的项目中我并不推荐直接使用SpringBoot自带的,而是要和Maven整合在一起,这样能够使得我们打包,启动等操作变的更加方便。比如我们经常使用的Maven打包命令如下:
mvn clean install package -P dev

这个**-P**就是指定配置环境的,在IDEA中打包根本不用写命令,直接点击一下就OK了,如下图:

img

准备配置文件

  • 准备四个配置文件,分别是application.yml、application-dev.yml、application-test.yml、application-prod.yml。

(也可以是使用 application.properties、application-dev.properties、application-test.properties、application-prod.properties )

img

  • application.yml作为主配置文件,里面定义了需要激活的环境,如下:
spring:
  profiles:
    active: @profile.active@
  • application-*.yml这三个配置文件就是各自环境的配置,比如application-dev.yml(开发环境)文件的配置如下:
server:
  port: 8080
  servlet:
    context-path: /api-front
spring:
  redis:
    database: 2
    host: 120.26.101.203
    password: live4dream
    jedis:
      pool:
        max-active: 8
        min-idle: 0
        maxActive: 10

POM文件配置

  • 要和Maven整合当然少不了pom文件的配置,maven中也提供了profile的支持,每个profile能够定义自己的一些依赖和配置和激活条件,profile配置如下:
<!--定义三种开发环境-->
    <profiles>
        <profile>
            <!--不同环境的唯一id-->
            <id>dev</id>
            <activation>
                <!--默认激活开发环境-->
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <!--profile.active对应application.yml中的@profile.active@-->
                <profile.active>dev</profile.active>
            </properties>
        </profile>

        <!--测试环境-->
        <profile>
            <id>test</id>
            <properties>
                <profile.active>test</profile.active>
            </properties>
        </profile>

        <!--生产环境-->
        <profile>
            <id>prod</id>
            <properties>
                <profile.active>prod</profile.active>
            </properties>
        </profile>
    </profiles>
  • maven中的profile的激活条件还可以根据jdk、操作系统、文件存在或者缺失来激活。如下:
<!--activation用来指定激活方式,可以根据jdk环境,环境变量,文件的存在或缺失-->
            <activation>
                <!--配置默认激活-->
                <activeByDefault>true</activeByDefault>
                
                <!--通过jdk版本-->
                <!--当jdk环境版本为1.8时,此profile被激活-->
                <jdk>1.8</jdk>
                <!--当jdk环境版本1.8或以上时,此profile被激活-->
                <jdk>[1.8,)</jdk>

                <!--根据当前操作系统-->
                <os>
                    <name>Windows XP</name>
                    <family>Windows</family>
                    <arch>x86</arch>
                    <version>5.1.2600</version>
                </os>
            </activation>
        </profile>

资源过滤

  • 在进行生产环境打包的时候并不需要开发和测试环境的一些文件,这里我们可以进行资源的过滤,保留需要的配置和文件,同样是在pom文件中定义,如下(注意噢,使用 properties的话 yml全部要换成properties):
    <build>
        <resources>
            <!--排除配置文件-->
            <resource>
                <directory>src/main/resources</directory>
                <!--先排除所有的配置文件-->
                <excludes>
                    <!--使用通配符,当然可以定义多个exclude标签进行排除-->
                    <exclude>application*.yml</exclude>
                </excludes>
            </resource>

            <!--根据激活条件引入打包所需的配置和文件-->
            <resource>
                <directory>src/main/resources</directory>
                <!--引入所需环境的配置文件-->
                <filtering>true</filtering>
                <includes>
                    <include>application.yml</include>
                    <!--根据maven选择环境导入配置文件-->
                    <include>application-${profile.active}.yml</include>
                </includes>
            </resource>
        </resources>
    </build>

上述配置主要分为两个方面,第一是先排除所有配置文件,第二是根据**profile.active**动态的引入配置文件。

IDEA切换

  • 上面的配置全部完成的话,就可以在IDEA中正常使用了,如下图:

img

  • 点击lifecycle中的package即可正常打包,相当于一下命令
mvn clean install package -P dev

总结

  • SpringBoot和Maven的多环境配置需要以下步骤:

    • 准备多环境的配置文件
    • POM文件中配置profile
    • POM文件中配置资源过滤
    • IDEA中自由切换