在实际的开发过程中,我们需要将应用程序在不同环境下进行部署,而一般每个环境的配置文件都不同,如果采用手工方式来修改配置文件的话,效率低且易出错。因此我们将通过maven来实现配置文件的自动切换
一、切分配置文件
1.1创建每个环境所对应的配置文件
我们可以将不同环境的公共部分放在application.yml里,然后再新建application-dev.yml,application-test.yml,application-prod.yml来分别保存对应的配置。注意application的配置要放在同一文件夹下,而像redis不同环境下的配置则可以新建一个文件夹env来存放。
1.2修改application.yml配置文件
将存放公共配置的application.yml中的默认配置该为 #profileName#
二、修改Maven配置
2.1在<build>中添加resource
<resources>
<resource>
<directory>src/main/resources</directory>
<excludes>
<!-- 打包时排除文件-->
<exclude>env/*.*</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.yml</include>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
2.2添加plugin,注意里面<resource>的配置
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<id>default-resources</id>
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>target/classes</outputDirectory>
<useDefaultDelimiters>false</useDefaultDelimiters>
<delimiters>
<delimiter>#</delimiter>
</delimiters>
<resources>
<resource>
<directory>src/main/resources</directory>
<excludes>
<!-- 打包时排除文件-->
<exclude>env/*.*</exclude>
<exclude>application-dev.yml</exclude>
<exclude>application-test.yml</exclude>
<exclude>application-prod.yml</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources/</directory>
<includes>
<include>application.yml</include>
<include>env/redis-${profileName}.properties</include>
<include>application-${profileName}.yml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
2.3在<project>下添加<profiles>
<profiles>
<profile>
<id>dev</id>
<properties>
<profileName>dev</profileName>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>test</id>
<properties>
<profileName>test</profileName>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<profileName>prod</profileName>
</properties>
</profile>
</profiles>
三、Maven打包
执行以下命令进行打包,dev为对应的环境
mvn clean package -P dev
可以看到最终打包后的程序文件里只有对应环境下的配置文件,并且application.yml里的#profileName#会自动替换成对应的环境