背景
我们在开发项目的过程中,不同的环境中不同的配置肯定是有所区别的,如果这时候切换一下环境在手动改一下肯定是非常麻烦的。
解决
spring boot允许你通过命名约定按照一定的格式(application-{profile}.properties)来定义多个配置文件,然后通过在application.properyies通过spring.profiles.active来具体激活一个或者多个配置文件,如果没有没有指定任何profile的配置文件的话,spring boot默认会启动application-default.properties。
举个例子
application-dev.properties:开发环境
application-test.properties:测试环境
application-prod.properties:生产环境
至于哪个具体的配置文件会被加载,需要在application.properties文件中通过spring.profiles.active属性来设置,其值对应{profile}值。
如:spring.profiles.active=test就会加载application-test.properties配置文件内容
但是这样是写死在配置文件里面的,一般在发布项目时需在命令行下根据指定环境动态改变spring.profiles.active的值,针对这种方式如我们使用的是MAVEN打包工具,可通过如下方式来改变。
spring.profiles.active=@profileActive@
添加POM
<profiles>
<profile>
<id>prod</id>
<properties>
<profileActive>prod</profileActive>
</properties>
</profile>
<profile>
<id>test</id>
<properties>
<profileActive>local</profileActive>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<profile>
<profiles>
然后再maven中
mvn clean install -Dmaven.test.skip=true -Pprod
总结:参数-Pprod,表明会激活项目下的pom.xml配置的<profiles>标签下id为prod的配置信息,其中默认指向test,因为<activeByDefault>true</activeByDefault>,所以在idea开发环境下只要项目是一个maven工程,开发调试时启动项目则spring boot 的配置文件spring.profiles.active=@profileActive@也能动态识别出默认profile为dev。