Maven 多环境配置

在开发过程当中每每会有多种环境,如开发环境、测试环境、生产环境等等。若是将配置文件写在一个文件里,在不一样环境时手动切换,这无疑是繁琐的,也是不智能的spring

Maven 工程的多环境配置

3个核心点:app

  1. 建立主配置文件,里面是须要的配置项,不过属性值采用 ${xxx} 形式书写
  2. 建立不一样环境的值文件,里面是须要动态加载到主配置文件的具体值
  3. 在 pom.xml 中配置 profile

1.主配置文件

为便于演示,这里只在 src/main/resources 目录下建立一个名为 application.properties 的配置文件,具体以下:maven

application.name=${application.name}
复制代码

2.不一样环境值文件

src/main 目录下建立一个 properties 文件夹,并在 properties 文件夹下分别建立 application-dev.propertiesapplication-prod.properties ,具体以下:测试

  1. application-dev.properties
application.name=application-dev
复制代码
  1. application-prod.properties
application.name=application-prod
复制代码

3.pom 文件

<build>
    <filters>
        <!-- 这里的文件名必须与多环境配置文件的文件名相同, ${env} 会动态获取不一样环境 -->
        <!-- 假如激活 dev 环境, 这时对应的文件就是 src/main/properties/application-dev.properties -->
        <filter>src/main/properties/application-${env}.properties</filter>
    </filters>
    <resources>
        <resource>
            <!-- 能够理解为真正的配置文件所在的目录 -->
            <directory>src/main/resources</directory>
            <!-- 是否替换资源中的属性, 设置为 true 才能实现动态替换 -->
            <filtering>true</filtering>
        </resource>
    </resources>
</build>
<profiles>
    <!-- 环境一 -->
    <profile>
        <!-- 使用 mvn package 打包时, -P 指定 profile 的输入值就是此 id -->
        <!-- id 能够随便命名, 不能重复, 能够与 env 相同, 这里演示特地与 env 不一样 -->
        <id>develop</id>
        <properties>
            <!-- env 必须与文件的后缀一致(application-${env}.properties) -->
            <!-- 其中 env 这个标签也能够自定义, 没有强制要求必须是 env, 但必须与上面 application-${env}.properties 的 ${} 里的值一致 -->
            <env>dev</env>
        </properties>
        <!-- 不指定环境则默认 dev 环境, 能够放在任一个环境下, 但不能在多个环境中指定 -->
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>

    <!-- 环境二 -->
    <profile>
        <id>product</id>
        <properties>
            <env>prod</env>
        </properties>
    </profile>
</profiles>
复制代码

演示

  1. 直接执行 mvn clean package -Dmaven.test.skip=true,此时打包后的 application.properties 内容以下:ui

    application.name=application-dev
    复制代码

    注意这里并无指定 profile,但咱们设置了默认环境为 dev,因此 application-dev.properties 的值就打进了 application.propertiesspa

  2. 执行 mvn clean package -Pproduct -Dmaven.test.skip=true,此时打包后的 application.properties 内容以下:code

    application.name=application-prod
    复制代码

    注意 -P 指定的 profilepom.xml 里配置的 profile id,而不是标签 env 对应的值server

  3. 若是将 build:resources:resource:filtering 标签注释掉,或者设置为 false,此时打包后的 application.properties 内容以下:xml

    application.name=${application.name}
    复制代码

    因此若是要经过 profile 动态加载配置文件,build:resources:resource:filtering 标签必定要设置为 trueip

Spring Boot 的多环境配置

相比与普通 Maven 工程,Spring Boot 多环境配置更快捷

1.主配置文件

src/main/resources 目录下建立 application.propertiesapplication.yml ,这里建立 application.yml,内容以下:

spring:
 profiles:
 active: @profileActive@
复制代码

2.不一样环境值文件

src/main/resources 目录下建立 application-dev.yml,内容以下:

server:
 port: 8088
复制代码

src/main/resources 目录下建立 application-prod.yml,内容以下:

server:
 port: 8099
复制代码

3.pom 文件

<profiles>
    <profile>
        <!-- profile id, 打包时指定使用 -->
        <id>dev</id>
        <properties>
            <profileActive>dev</profileActive>
        </properties>
        <!-- 默认激活 dev 环境 -->
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
    <profile>
        <id>prod</id>
        <properties>
            <profileActive>prod</profileActive>
        </properties>
    </profile>
</profiles>
复制代码

能够发现 Spring Boot 的 pom 文件不须要配置 build 标签就能够工做,比普通 Maven 工程更友好

相关文章
相关标签/搜索