在 application.yml 中配置:
1 | spring: profiles: active: @spring.profile@ |
其中, spring.profiles.active 配置项表示启用哪套环境,这里没有明确指定,而是用了占位符 @spring.profile@
不同的环境有不同的配置文件,例如以下有 dev、prod、test 三套环境:
在打包时,如果想要打 prod 环境的包,可以使用命令:
mvn clean package -Dmaven.test.skip=true -Dspring.profile=prod
打包后解压,再次查看 application.yml,占位符 @spring.profile@ 被替换成了 prod,即打包命令通过 -Dspring.profile=prod 传入的值:
1 | spring: profiles: active: prod |
原理
Spring Boot 项目通过 @..@ 指定占位符,参考文档:https://docs.spring.io/spring-boot/docs/2.1.4.RELEASE/reference/htmlsingle/#howto-automatic-expansion-maven
我们的 Spring Boot 项目都是继承自 spring-boot-starter-parent 模块,源码中可以找到:
配置占位符为 @:
并且使用了 maven-resources-plugin 插件
查看 maven-resources-plugin 插件的文档,可以看到这个插件可以在打包时通过 “-D” 选项,对项目中的占位符进行替换:
https://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html