背景
众所周知,在软件开发过程中,我们一般会有生产环境,开发环境,测试环境等等,针对这些环境,我们需要在配置文件对相同的参数,设置不同的值,那么,如何做到简单、优雅、快速的进行切换呢?
解决方案
一、使用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>