大家在使用maven开发springboot程序的时候,肯定会用到maven的多环境配置,以及springboot本身的多环境配置。那么两者该如何结合起来使用呢?
一、首页我们在pom.xml里配置多环境,配置如下:
<profiles>
<profile>
<id>dev</id>
<properties>
<pom.profile>dev</pom.profile>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>test</id>
<properties>
<pom.profile>test</pom.profile>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<pom.profile>prod</pom.profile>
</properties>
</profile>
</profiles>
从上面的配置我们看到,配置了3个环境,profile节点可以有任意多个。
(1)子元素 id为环境id,我们可以写 dev,test,prod等;
(2)每个环境profile我们添加多个属性值,这个值可以在application.yml/application.properties等配置文件中使用,比如我们这配置的pom.profile,这个名字可以自定义;
(3)默认环境节点的配置,我们用activation--activeByDefault设置tue即可;
二、继续在pom.xml里配置,在build里添加插件,让pom.xml里的属性值可以在其他地方使用。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<encoding>utf-8</encoding>
<useDefaultDelimiters>true</useDefaultDelimiters>
</configuration>
</plugin>
</plugins>
</build>
我们添加了插件 maven-resources-plugin,一定要配置confguration的2个子节点:encoding和useDefaultDelimiters,不配置则无法生效。配置好后,右侧的Maven就有如下的Profiles选项了,勾选一个,执行package等命令,即为该环境生成Jar等。
pom.xml的配置已完成,接下来我们来配置springboot的application.yml配置文件。
#设置启用的环境
spring:
profiles:
active: ${pom.profile}
---
#开发
spring:
profiles: dev
server:
port: 880
---
#测试
spring:
profiles: test
server:
port: 881
---
#生产
spring:
config:
activate:
on-profile: prod
server:
port: 883
配置了3个环境,spring.profiles(或spring.config.activate.on-profile)配置的值对应的环境。spring.profiles.active配置激活的环境,值使用占位符 ${pom.profile},这个占位符就是从pom.xml的环境属性中获取的。
三、验证
我们执行package,生成jar包,我们打开jar包 ,目录BOOT-INF/classes里打开application.yml,就可以看到占位符${pom.profile}已经替换成pom.xml里对应的值。