SpringBoot+Maven多环境动态切换yml配置
一、背景
在实际开发中,经常会有多种环境配置,例如开发环境、测试环境、生产环境等。在不同的环境下,配置有可能是不一样的,比如接口地址、数据库连接配置等。为了避免频繁的修改配置文件,我们可以通过配置实现动态切换。
本文将讲解如果在SpringBoot项目中动态切换配置。
二、拆分yml文件
为更好维护各种环境的配置,这里将yml文件拆分。当然还有其它方式,这里不再赘述。好了,直接上图,上代码

application.yml文件
spring:
profiles:
active: #spring.profiles.active#



三、配置pom.xml
- 在pom.xml添加如下配置
<profiles>
<!-- 开发环境 -->
<profile>
<id>dev</id>
<properties>
<spring.profiles.active>dev</spring.profiles.active>
</properties>
<activation>
<activeByDefault>true</activeByDefault> <!-- 默认dev -->
</activation>
</profile>
<!-- 测试环境 -->
<profile>
<id>test</id>
<properties>
<spring.profiles.active>test</spring.profiles.active>
</properties>
</profile>
<!-- 生产环境 -->
<profile>
<id>prod</id>
<properties>
<spring.profiles.active>prod</spring.profiles.active>
</properties>
</profile>
</profiles>;
- 在pom.xml的在< plugins/>里添加插件
<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>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/resources.${spring.profiles.active}</directory>
<filtering>false</filtering>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
这里<delimiter>#</delimiter>用来增加一个占位符,Maven本身有占位符${xxx},但这个占位符被SpringBoot占用了,所以我们就再定义一个。<filtering>true</filtering>表示打开过滤器开关,这样application.yml文件中的#spring.profiles.active#部分就会替换为pom.xml里profiles中定义的spring.profiles.active变量值。
这样,在用maven打包的时候,使用mvn package -P prod打包,最后打包后的文件中,application.yml中的spring.profiles.active的值就是prod。这样直接运行java -jar xxx.jar,就是生产环境的配置了。
来源:https://blog.csdn.net/qq_33581268/article/details/99694676