SpringBoot项目多环境配置

1,703 阅读2分钟

Spring.profiles属性

一般在实际项目中,我们大致会分为dev(开发),test(测试),prod(生产)。每个环境的一些参数配置项是有差异的,比如接口地址、数据库连接配置等。为了避免频繁的修改配置文件,我们想要简便地切换各种环境配置,就需要多个环境的配置项,SpringBoot为我们提供了profiles这个属性,方便我们切换不同的环境以及针对不同的环境进行打包。

首先我们将原来的application.yml拆分,创建不同环境的application.yml,命名规则为application-{profiles}.yml,例如,在src/main/resource目录下创建:

application-dev.yml
application-test.yml
application-prod.yml

将不变的配置项放在application.yml中,将需要根据不同环境改变的配置项分别放在对应的yml文件下。

就可以在application.yml使用以下属性来指定使用哪个环境的配置文件,例如指定开发环境:

spring:
  profiles:
    active: dev

指定测试环境:

spring:
  profiles:
    active: test

这样我们就实现了通过手动修改profiles属性来切换不同的配置文件,但是这样在打包的时候,每次还需要手动修改,实际上我们可以使用占位符的方式,将这个参数动态的传入,以实现不同环境的切换,需要按如下所示,配置pom文件。

pom.xml配置

首先添加profiles属性:

	<profiles>
		<profile>
			<!-- 本地开发环境 -->
			<id>dev</id>
			<properties>
				<profiles.active>dev</profiles.active>
				<spring.active>dev</spring.active>
			</properties>
            <!-- 默认是dev环境 -->
			<activation>
				<activeByDefault>true</activeByDefault>
			</activation>
		</profile>
		<profile>
			<!-- 生产环境 -->
			<id>test</id>
			<properties>
				<profiles.active>test</profiles.active>
				<spring.active>test</spring.active>
			</properties>
		</profile>
		<profile>
			<!-- 生产环境 -->
			<id>prod</id>
			<properties>
				<profiles.active>prod</profiles.active>
				<spring.active>prod</spring.active>
			</properties>
		</profile>
	</profiles>

添加resource:

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

修改application.yml

这时,我们就可以配置application.yml中的profiles属性:

spring:
  profiles:
    active: @spring.active@

需要注意的是,不同的SpringBoot版本占位符可能使用的不一样,之前使用的是''$''符号或者"#",新版本的SpringBoot版本使用的是''@"符号。

指定运行环境

经过以上设置,在idea中,我们就可以手动选择需要的配置环境:

或者在打包的时候,传入相关的参数:

mvn clean package -P dev
mvn clean package -P test
mvn clean package -P prod