前言
在开发过程中,我们的项目通常有开发(dev)、测试(test)、生产(prod)等三种环境,而在不通的项目环境中,配置的内容往往是不一样的,比如测试的数据库配置与生产的数据库配置。而来回改动配置文件也会加大我们的工作量,也容易出错,因此,可以利用maven profile配置来解决这个问题。
1、profile基本配置
<profiles>
<profile>
<id>dev</id>
<properties>
<spring.profiles.active>dev</spring.profiles.active>
</properties>
<build>
<resources>
<resource>
<!--目录-->
<directory>src/main/resources</directory>
<!--过滤-->
<filtering>true</filtering>
<!--包含-->
<includes></includes>
<!--排除-->
<excludes>
<exclude>application-prod.yml</exclude>
<exclude>application-test.yml</exclude>
</excludes>
</resource>
</resources>
</build>
<!--没有指定其他profile为激活状态时,该profile就默认会被激活-->
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>test</id>
<properties>
<spring.profiles.active>test</spring.profiles.active>
</properties>
<build>
<resources>
<resource>
<!--目录-->
<directory>src/main/resources</directory>
<!--过滤-->
<filtering>true</filtering>
<!--包含-->
<includes></includes>
<!--排除-->
<excludes>
<exclude>application-prod.yml</exclude>
<exclude>application-dev.yml</exclude>
</excludes>
</resource>
</resources>
</build>
</profile>
<profile>
<id>prod</id>
<properties>
<spring.profiles.active>prod</spring.profiles.active>
</properties>
<build>
<resources>
<resource>
<!--目录-->
<directory>src/main/resources</directory>
<!--过滤-->
<filtering>true</filtering>
<!--包含-->
<includes></includes>
<!--排除-->
<excludes>
<exclude>application-dev.yml</exclude>
<exclude>application-test.yml</exclude>
</excludes>
</resource>
</resources>
</build>
</profile>
</profiles>
2、项目目录结构
3、文件内容
3.1、
application.yml
spring:
profiles:
active: dev
application-dev.yml
server:
port: 9900
test:
value: dev
application-test.yml
server:
port: 9900
test:
value: test
application-prod.yml
server:
port: 9900
test:
value: pro
4、测试
1、选择环境
2、修改application.yml配置
spring:
profiles:
active: dev
若想切换环境,将application.yml文件中的active设置成相应的名字,并选择对应的profiles即可
@RestController
@RequestMapping("/")
public class HelloController {
@Value("${test.value}")
String value;
@GetMapping("value")
public String getValue(){return value;}
}
5、原理
这里定义了多个profile,每个profile都有唯一的id,也包含properties属性。这里为每个profile都定义一个名为profiles.active的properties,每个环境的值不同。当我们打包项目时,激活不同的环境,profiles.active字段就会被赋予不同的值。