Maven多环境配置

编程

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

Maven 工程的多环境配置

3个核心点:

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

1.主配置文件

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

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 内容如下:

    application.name=application-dev

    复制代码

    注意这里并没有指定 profile,但我们设置了默认环境为 dev,所以 application-dev.properties 的值就打进了 application.properties

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

    application.name=application-prod

    复制代码

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

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

    application.name=${application.name}

    复制代码

    所以如果要通过 profile 动态加载配置文件,build:resources:resource:filtering 标签一定要设置为 true

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 工程更友好

1. yaml 替换 @@ 包裹的文本,

2 ${url} 替换

以上是 Maven多环境配置 的全部内容, 来源链接: utcz.com/z/517474.html

回到顶部