SpringBoot+Maven多环境动态切换yml配置

偶尔善良 提交于 2019-11-27 16:02:55

SpringBoot+Maven多环境动态切换yml配置

一、背景

在实际开发中,经常会有多种环境配置,例如开发环境、测试环境、生产环境等。在不同的环境下,配置有可能是不一样的,比如接口地址、数据库连接配置等。为了避免频繁的修改配置文件,我们可以通过配置实现动态切换。

本文将讲解如果在SpringBoot项目中动态切换配置。

二、拆分yml文件

为更好维护各种环境的配置,这里将yml文件拆分。当然还有其它方式,这里不再赘述。好了,直接上图,上代码
文件目录
总
application.yml文件

spring:
  profiles:
    active: #spring.profiles.active#

开发测试生产

三、配置pom.xml

  1. 在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>;
  1. 在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,就是生产环境的配置了。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!