前言
为了实现不同环境构建的不同需求,这里使用到了 Maven 的 Profile 特性。因为 Profile 能够在构建时修改 POM 的一个子集,或者添加额外的配置元素。接下来将介绍 Maven 中对 Profile 的配置和激活。
Maven 配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| <build> <finalName>${project.name}</finalName> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> </build>
<project> <profiles> <profile> <id>dev</id> <properties> <profiles.active>dev</profiles.active> <nacos.username>nacos</nacos.username> <nacos.password>nacos</nacos.password> </properties> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> <profile> <id>prod</id> <properties> <profiles.active>prod</profiles.active> <nacos.username>admin</nacos.username> <nacos.password>admin</nacos.password> </properties> <activation> <activeByDefault>false</activeByDefault> </activation> </profile> </profiles> </project>
|
SpringBoot 配置
在 SpringBoot 项目的 application.yml
配置文件中,可以通过 @属性名@
的格式获取在 <profile>
标签中定义的属性值,同时还可以通过 @profiles.active@
的格式来获取当前被激活的 Profile 的 Id 属性。
配置案例一
1 2 3
| spring: profiles: active: @profiles.active@
|
配置案例二
在下述的例子中,使用 Nacos 作为配置中心,当 Maven 激活不同的 Profile 时,Nacos 的客户端会从配置中心拉取 Profile 对应的配置信息。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| server: port: 9091
spring: application: name: @artifactId@ cloud: nacos: username: @nacos.username@ password: @nacos.password@ discovery: server-addr: ${NACOS_HOST:shop-register}:${NACOS_PORT:8848} config: server-addr: ${spring.cloud.nacos.discovery.server-addr} extension-configs[0]: data-id: shop-application-@profiles.active@.yml refresh: true extension-configs[1]: data-id: @artifactId@-@profiles.active@.yml refresh: true
|
无法解析 @ 符号
若使用了上述的 SpringBoot 配置内容后,在 IDEA 内启动项目时,提示 @...@
的内容无法解析,可以按照以下步骤解决。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| <build> <resources> <resource> <directory>src/main/java</directory> <filtering>false</filtering> <includes> <include>**/*.*</include> </includes> </resource> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> <includes> <include>**/*.*</include> </includes> </resource> </resources>
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>3.3.0</version> <configuration> <delimiters>@</delimiters> <useDefaultDelimiters>false</useDefaultDelimiters> </configuration> </plugin> </build>
|
- 第二步:先执行 Maven 的编译命令,再让 IDEA 启动项目
Maven 激活配置
- 当打包项目时,可以在 Maven 的命令行中添加参数
-P
,指定要激活的 Profile 的 Id,这样就可以激活不同的环境配置。
1
| $ mvn clean package -Pdev
|
- 如果一次要激活多个 Profile,可以用逗号分开一起激活
1
| $ mvn clean package -Pdev,test
|
- 若希望查看当前默认激活的是哪个 Profile,可以使用以下命令
1
| $ mvn help:active-profiles
|
Maven 读取系统环境变量
在 Linux 系统环境中,Maven 可以使用 ${env.xxxx}
的格式读取到系统的环境变量,使用示例如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| <project> <profiles> <profile> <id>dev</id> <properties> <profiles.active>dev</profiles.active> <nacos.username>nacos</nacos.username> <nacos.password>nacos</nacos.password> </properties> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> <profile> <id>prod</id> <properties> <profiles.active>prod</profiles.active> <nacos.username>${env.NACOS_USERNAME}</nacos.username> <nacos.password>${env.NACOS_PASSWORD}</nacos.password> </properties> <activation> <activeByDefault>false</activeByDefault> </activation> </profile> </profiles> </project>
|
参考资料