Maven多环境有什么好处

    在日常项目开发中,我们经常需要在开发环境、测试环境、生产环境等情况下进行项目的部署,对于配置文件来说,如果无法识别各个环境,就意味着当我们在进行开发时,需要将配置文件的内容更改为测试环境,而在进行生产部署时,又需要将其内容改为生产内容。这对于一个长期项目来说简直是灾难性的,因为我们需要将更多的精力放在无关系统功能的层面,而Maven多环境配置的出现恰恰帮我们解决了这些。接下来我们通过一个简单的例子来实现相应功能。

Maven多环境配置

    假设我们现在有开发和生产两个环境(当然在实际开发过程中,可能部署环境会多于这两个)。那么我们如何进行切换呢。
    紧接上一节内容,我们复制一个chapter_3的文件夹,内容与chapter_2相同。然后在resources文件夹下新建appliaction-dev.yml及appliaction-prod.yml两个文件(注意,这两个文件应采用application-name.yml的格式,以便后期可以根据多环境查找到),并将application.yml的内容各复制一份到对应文件中。
pom文件中添加如下内容:

<profiles>
    <profile>
        <id>dev</id>
        <properties>
            <profileActive>dev</profileActive>
        </properties>
        <activation>
            <!--默认激活-->
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
    <profile>
        <id>prod</id>
        <properties>
            <profileActive>prod</profileActive>
        </properties>
    </profile>
</profiles>
<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
                <filtering>true</filtering>
                <excludes>
                    <exclude>**/*</exclude>
                </excludes>
            </resource>

            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
                <includes>
                    <include>application.yml</include>
                    <include>application-${profileActive}.yml</include>
                </includes>
            </resource>
        </resources>

        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>
        </plugins>
    </build>

application.yml文件内容如下:

spring:
  profiles:
    active: @profileActive@

application-dev.yml文件内容如下:

server:
  port: 8090

#自定义的属性
my:
  name: willem,from dev

application-prod.yml文件内容如下:

server:
  port: 8090

#自定义的属性
my:
  name: willem,from prod

启动项目并通过postman进行访问,结果如下

maven springboot 多模块项目 springboot maven多环境配置_多环境


可以看出,此时访问得到的内容为application-dev.yml中的内容。

若我们将pom.xml文件中prod的activeByDefault设置为true,再次启动项目,会得到如下结果

maven springboot 多模块项目 springboot maven多环境配置_maven_02


此时得到的内容为application-prod.yml中的内容。通过maven多环境的配置,我们实现了程序的便利性,只需在不同环境是应用不同而选项,就可以轻而易举的将项目打包为我们想要的样子。

项目目录结构如下

maven springboot 多模块项目 springboot maven多环境配置_maven_03