一般来说, 一个项目会有多个环境, 比如生产环境(prod), 开发环境(dev), 测试环境(test), 这些环境的配置肯定会有所不同, 那么如何使用 Maven
+ SpringBoot
进行多环境配置?
- 在
resources
下有以下四个文件, 其中application.yml
是基础配置文件, 其他配置文件的格式必须是application-*.xml
:
- application.yml
spring:
profiles:
active: dev, prod, test
- application-dev.yml
server:
port: 8000
- application-prod.yml
server:
port: 9000
- application-test.yml
server:
port: 9996
- 在
pom.xml
文件添加以下内容:
<profiles>
<profile>
<id>dev</id>
<properties>
<active>dev</active>
</properties>
<activation>
<!-- 默认启用的环境 -->
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>prod</id>
<properties>
<active>prod</active>
</properties>
</profile>
<profile>
<id>test</id>
<properties>
<active>test</active>
</properties>
</profile>
</profiles>
<build>
<!-- 管理资源文件 -->
<resources>
<resource>
<directory>${basedir}/src/main/resources</directory>
<excludes>
<!-- 过滤所有配置文件 -->
<exclude>**/application-*.yml</exclude>
</excludes>
</resource>
<resource>
<filtering>true</filtering>
<directory>${basedir}/src/main/resources</directory>
<includes>
<!-- 加载特定环境的配置文件 -->
<include>**/application-${active}.yml</include>
</includes>
</resource>
</resources>
</build>
- 在不同环境中启动项目:
# dev
mvn spring-boot:run
# prod
mvn spring-boot:run -Pprod
# test
mvn spring-boot:run -Ptest
如果尝试使用类似 @active@
或者 '@active@'
进行多环境配置, 可能会出现 yml
的解析问题(以前是可以的: SpringBoot-demo),
其实是没有必要这样做的, 因为 SpringBoot
是支持同时启用多个环境的, 比如:
spring:
profiles:
active: dev, prod, test
然后通过 Maven
对资源文件进行管理即可