相信大家都用过spring Boot profile 和 maven profile,在使用Spring boot profile时我们都会有如下的配置。
其中*.properties文件中存放的时不同环境下的配置信息. application.yml中会有下面一段配置信息
spring:
profiles:
active: "dev"
当我们想想换一个profile时会需要去更改spring.profiles.active 的值,这样是不是还比较麻烦.
再让我们看看我们使用maven profile的配置, 在使用maven配置是使用的是如下的spring boot配置文件.
<!--配置环境的profile-->
<profiles>
<profile>
<id>dev</id>
<properties>
<profiles.activation>dev</profiles.activation>
</properties>
</profile>
<profile>
<id>local</id>
<properties>
<profiles.activation>local</profiles.activation>
</properties>
</profile>
</profiles>
那我们使用maven 相关的命令时, 它是如何找到正确的配置呢, 这时就需要用到 build -> resources相关的配置了.如下所示:
<resource>
<directory>src/main/config/${profiles.activation}</directory>
<filtering>true</filtering>
</resource>
这个配置表明只保留src/main/config/下与profiles.activation相匹配的文件夹. 也就是说当你运行如下maven命令时
mvn package -P local
此时对应的profiles.activation属性就是local, 则config/下的local目录就是被保留,则使用的spring 配置就是在local下的application.properties文件.
既然Spring boot 和 maven都有profile相关的配置,那二者能不能结合使用, 这样再使用maven打包时, 通过指定profile, 让spring boot的profile自动切换成maven指定的profile,这样就不用我们认为的每次手动更改了,幸运的是Spring Boot也想到了这一点, 下面我们看看如何让二者配合工作. 首先Spring boot的配置文件不变,唯一要更改的是将application.yml文件改成如下所示, spring boot支持使用@...@来映射maven中定义的属性.
spring:
profiles:
active: @profiles.activation@
再来看看maven相关配置的变化, maven中关于profile的配置是不变的, 但是由于我们更改的spring boot配置,引入了profile,所以resources的配置会做如下调整:
<resource>
<directory>src/main/resources/config</directory>
<filtering>true</filtering>
<includes>
<include>application-${profiles.activation}.properties</include>
<include>application.yml</include>
</includes>
</resource>
这样配置完之后,你在使用maven打包后,spring boot就会选择你使用的maven profile作为spring boot的profile, 你也不需要手动更改spring boot的profile啦,是不是很清爽。