本文最后更新于 511 天前,其中的信息可能已经有所发展或是发生改变。
一、Maven配置里使用SpringBoot配置里的属性
代码语言:javascript复制 <resource>
<directory>src/main/resources/${profiles.active}</directory>
<filtering>true</filtering>
<includes>
<include>*.properties</include>
<include>*.xml</include>
</includes>
</resource>
- maven里的
<filtering>true</filtering>
- Spring EL表达式和MAVEN的占位符表达式长得一样,但两者默认进水不犯河水,不能再Spring的范围内取maven的参数
- filtering的作用就是打通两者的连接, 让井水犯河水, 具体来说是让Spring的范围内能取到maven的参数
- filtering的使用要配合resource一起使用: 前者开启打通连接,后者指定打通的范围.
- 如果你的项目继承了spring-boot-starter-parent,如果想在application.properties中使用maven的占位符以获取maven的参数,此时就不能用${},因为可能会与EL表达式冲突,怎么办? 此时parent依赖将maven占位符表达式默认改为@var@的形式. 所以只能用@var@替代${var}
二、激活不同的profile
代码语言:javascript复制 <profiles>
<profile>
<!--不同环境Profile的唯一id-->
<id>dev</id>
<properties>
<!--profiles.active是自定义的字段(名字随便起),自定义字段可以有多个-->
<profiles.active>dev</profiles.active>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>telework</id>
<properties>
<profiles.active>telework</profiles.active>
</properties>
</profile>
<profile>
<id>sit</id>
<properties>
<profiles.active>sit</profiles.active>
</properties>
</profile>
<profile>
<id>pre</id>
<properties>
<profiles.active>pre</profiles.active>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<profiles.active>prod</profiles.active>
</properties>
</profile>
</profiles>
- 当我们打包项目时,激活不同的环境,profiles.active字段就会被赋予不同的值
- 使用maven打包时通过-P参数,-P后跟上profile的唯一id,如
mvn clean package -Ptest
- 总结:可以通过maven命令给
profiles.active
赋予不同的值
三、通过maven指定SpringBoot激活哪套配置文件
spring.profiles.active=@profiles.active@
- 这儿就是第一点说的,SpringBoot配置文件里使用maven属性
- 到这里,上述知识可以连接起来了
- 通过第一点可知:maven配置文件里读取SpringBoot的
spring.profiles.active
属性 - 通过第三点可知:SpringBoot的
spring.profiles.active
属性读取maven的自定义属性profiles.active
- 通过第二点可知:通过maven命令指定maven的
profiles.active
属性 - 结论:可以通过maven命令决定打包和使用哪套配置文件
- 通过第一点可知:maven配置文件里读取SpringBoot的