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进行访问,结果如下
可以看出,此时访问得到的内容为application-dev.yml中的内容。
若我们将pom.xml文件中prod的activeByDefault设置为true,再次启动项目,会得到如下结果
此时得到的内容为application-prod.yml中的内容。通过maven多环境的配置,我们实现了程序的便利性,只需在不同环境是应用不同而选项,就可以轻而易举的将项目打包为我们想要的样子。
项目目录结构如下
项目地址:https://github.com/Willem520/spring-boot-learning.git,源码位于chapter_3文件夹下