背景

众所周知,在软件开发过程中,我们一般会有生产环境,开发环境,测试环境等等,针对这些环境,我们需要在配置文件对相同的参数,设置不同的值,那么,如何做到简单、优雅、快速的进行切换呢?

解决方案

一、使用SpringBoot原生提供的Profile

首先,我们知道在SpringBoot中有提供:

spring:
 profiles:
  active: pro

这个属性来选择对应环境的配置文件,当然也可以同时设置多个配置文件:

spring:
 profiles:
  active:
   - pro
   - test

但是有一个问题,这种方式不够快速简单,需要每次打包时修改参数值;要么就是启动时,增加--spring.profiles.active这个参数;过于麻烦,那么有什么方案可以更简单呢。

二、使用Maven的Profile和SpringBoot的Porfile相结合的方式

我们通常使用Maven作为项目构建工具,在Maven中同样也提供了针对自定义配置信息这一功能,即Profile。

我们的思路如下,在Maveni进行打包时,通过设置Maven的参数,从而控制SpringBoot的Profile。

配置如下:

#这里只给出主要配置

<profiles>
		<profile>
			<id>dev</id>
			<properties>
				<druid.profiles.active>druid-dev</druid.profiles.active>
			</properties>
			<activation>
				<activeByDefault>true</activeByDefault>
			</activation>
		</profile>
		<profile>
			<id>pro</id>
			<properties>
				<druid.profiles.active>druid-pro</druid.profiles.active>
			</properties>
		</profile>
</profiles>

<resources>
			<resource>
				<directory>src/main/resources</directory>
                 #这个一定要加,否则不会进行替换
				<filtering>true</filtering>
			</resource>
</resources>

然后,SpringBoot的yml配置文件如下:

spring:
 profiles:
  active: @druid.profiles.active@

当我们install(打包)时,只需要设置 -P dev,这样就可以设置为dev环境的配置文件。

其它

让打包后的jar包只包含对应环境的配置文件,在Maven的pom文件中增加如下配置:

<resources>
#在这个resource中排除所有的yml文件
			<resource>
				<directory>src/main/resources</directory>
				<excludes>
					<exclude>application*.yml</exclude>
				</excludes>
			</resource>
#在这个resource中,根据profile引入对应的配置文件
			<resource>
				<directory>src/main/resources</directory>
				<filtering>true</filtering>
				<includes>
					<include>application.yml</include>
#根据profile引入对应的配置文件
					<include>application-${druid.profiles.active}.yml</include>
				</includes>
			</resource>
</resources>
04-22 20:41