在进行项目开发的时候通常会遇到环境切换的问题,例如开发环境生产环境。不同的环境通常有不同的配置,例如数据库,redis等等。每次切换环境再手动修改配置文件明显是不可取的,今天分享一下Spring boot项目通过Maven控制代码环境。

配置文件

首先是配置文件

配置文件.png

application.yml

spring:
  profiles:
    active: @profileActive@

application.yml主要用于控制环境以及一些通用的配置。@profileActive@即为环境变量,在pom.xml里会用到。
application-dev.ymlapplication-prod.yml分别为开发和线上环境的配置文件,通过@profileActive@即可切换。
application-dev.example.ymlapplication-prod.example.yml用于上传到git等版本控制工具,配置文件因人而异,通常不会上传到版本控制里。

pom.xml

首先创建两个profiledevprod。在使用package命令打包时用-P指定环境,例如package -P prod就会使用生产环境配置文件进行打包。
profiles标签在project标签下

    <profiles>
        <profile>
            <id>dev</id>
            <properties>
                <profileActive>dev</profileActive>
            </properties>
            <activation>
                <!-- 打包的默认选项 -->
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <profile>
            <id>prod</id>
            <properties>
                <profileActive>prod</profileActive>
            </properties>
        </profile>
    </profiles>

build标签下加入以下标签,使打包后文件名变为 项目名-环境-版本

<finalName>${project.artifactId}-${profileActive}-${project.version}</finalName>

build标签下加入以下标签,让打包完成的包只包含当前环境文件

<resources>
    <resource>
        <directory>src/main/resources</directory>
        <!-- 开启过滤替换功能-->
        <filtering>true</filtering>
        <includes>
            <!-- 项目打包完成的包中只包含当前环境文件 -->
            <include>application.yml</include>
            <include>application-${profileActive}.yml</include>
        </includes>
    </resource>
</resources>

idea配置

配置完pom.xml文件后,此时启动项目的话项目会找不到配置文件从而使用默认配置。打开ideaRun/Debug Configurations,选中自己的项目,指定Active profiles

idea.png

再创建一条Maven命令,用于打包生产环境。

maven.png