一般来说, 一个项目会有多个环境, 比如生产环境(prod), 开发环境(dev), 测试环境(test), 这些环境的配置肯定会有所不同, 那么如何使用 Maven + SpringBoot 进行多环境配置?

  1. 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

  1. 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>

  1. 在不同环境中启动项目:
# 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 对资源文件进行管理即可