搭建spring boot工程,需要yml文件与pom.xml配合设置多环境profile的问题,使用${}占位符不起效果
pom.xml添加如下代码
<profiles>
<profile>
<id>dev</id>
<properties>
<build.profile.id>dev</build.profile.id>
</properties>
</profile>
<profile>
<id>test</id>
<properties>
<build.profile.id>test</build.profile.id>
</properties>
</profile>
</profiles>
这时idea的maven projects中会出现如下图所示:
这时在application.yml中添加相关环境代码:
spring:
profiles:
active: ${build.profile.id}
server:
port: 3001
#----------------------------
---
spring:
profiles: dev
server:
port: 8081
---
spring:
profiles: test
server:
port: 8082
启动后并没有切换服务端口,也就是无法从pom文件中读取相关变量进行替换。
查询资料发现:
Spring Boot已经将maven-resources-plugins默认的
${}
方式改为了@@
方式,如@name@
修改后代码如下:
Spring:
profiles:
active: @build.profile.id@
如果想继续使用${}的方式,需要添加一个maven相关的插件:
<build>
<!--<plugins>-->
<!--</plugins>-->
<pluginManagement>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<encoding>utf-8</encoding>
<useDefaultDelimiters>true</useDefaultDelimiters>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
这样就可以愉快的使用啦~
之前pom配置为:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
如果不添加pluginManagement标签写成如下代码:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<encoding>utf-8</encoding>
<useDefaultDelimiters>true</useDefaultDelimiters>
</configuration>
</plugin>
</plugins>
</build>
也是没有效果的。