在开发过程中,正常都会有不同的环境,如开发环境、测试环境、生产环境,对于不同环境的配置也会有所差别,比如数据源配置、日志配置。如果在部署的时候再去根据不同环境调整对应的参数的话,太麻烦了,而且也容易出错。
而SpringBoot对这一个问题也有对应的解决方案。
1、定义profiles
<profiles> <profile> <!--不同环境Profile的唯一id--> <id>dev</id> <properties> <!--profiles.active是自定义的字段(名字随便起),自定义字段可以有多个--> <profiles.active>dev</profiles.active> </properties> </profile> <profile> <id>test</id> <properties> <profiles.active>test</profiles.active> </properties> </profile> <profile> <id>prod</id> <properties> <profiles.active>prod</profiles.active> </properties> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> </profiles>
可以看到定义了多个profile,每个profile都有唯一的id,也包含properties属性。这里为每个profile都定义一个名为profiles.active的properties,每个环境的值不同。当我们打包项目时,激活不同的环境,profiles.active字段就会被赋予不同的值。activeByDefault是用于设置默认激活的环境,即默认生产环境。
2、定义不同环境的配置
3、在配置中引用变量值
4、设置配置文件中需要激活的环境变量值
spring.profiles.active=xxx,此处直接引用激活的
5、结合resources,定义编译打包文件
这样打包完,资源文件就会排除掉非激活的环境配置文件。
至此项目多环境的配置就完成了。
如果使用的开发工具是idea的话,定义完profiles后,在maven窗口中就会出现定义的环境,名称即为profile的id
注意:
在第4步中,设置激活的profile(spring.profiles.active=@profiles.active@)使用的是@,而不是${}。有兴趣的可以见:spring boot通过maven filter替换properties属性为啥失败
对maven POM文件的其他配置感兴趣的可见:Maven使用说明
关于对资源文件编译时,就解析替换环境变量的值,相关配置见:maven resource filter 说明和配置方法