别在网上乱找了,【idea+maven】多环境配置,不坑!!

「这是我参与2022首次更文挑战的第1天,活动详情查看:2022首次更文挑战」。

最近在回顾springCloud + nacos的环境搭建,希望整合所有常用的组件,练手的同时也给他家增强下记忆力。

项目地址:gitee.com/wei_rong_xi…

过程中我发现一个比较坑的地方,就是【idea+maven】多环境配置,当然我也记不住,随便从网上找了几篇看看,发现这些文章丢三落四的,没一个是完整的,所以我特意整理此篇文章,希望大家不要再被坑了。

一、简介

对于java项目,尤其是使用springboot,maven等框架,通常会涉及到多个环境,开发环境测试环境生产环境等。记得当初我在亚信工作时,除了上述的三套环境,还有一个预发布环境。当时项目还是使用的SSM(spring + springMVC + mybatis) 的环境,jar通过手动导入的方式。再配合上eclipse那个蛋疼的的打包方式,真的是很痛苦。

后来随着技术的进步,项目架构逐渐开始向springboot转变,各种jar包版本工具,如mavengradle等开始进入工作中。此时我才发现,写代码可以这么舒服。

idea的各种插件,以及性能,我感觉甩了eclipse好几条街,用过就再也不能回去了。

我使用maven相比gradle要多一些,从一开始的摸索,到开始了解nexus,了解packageinstalldeploy的区别,使我再也不用回到那个手动导入jar的情形。

idea + maven的组合,更是极大的能够提升工作效率。我们只需要手动的选择需要打包的环境配置,然后再运行代码、打包的时候,可以自动的使用该环境配置,而不需要去修改配置文件了,减少错误的发生。

image.png

二、动手操作

2.1 spring.profiles.active配置

假设我们有如下的三个环境,开发dev、测试test、生产pro:

image.png

如上图,我们的配置文件命名方式是application-环境.yml

springboot提供如下的配置,让我们可以指定使用哪个配置文件:

spring:
    profiles:
        active: dev
复制代码

如上所示,我们每次切换环境必然要修改其值,很是不变。所以我们通过在yml文件中配置变量的形式。在yml中使用变量的方式如下:

@变量@
复制代码

我定义的变量如下:

spring:
  profiles:
    active: '@env@'
复制代码

为什么添加单引号?

如果不添加的话,程序启动无法识别,会报错导致启动失败,遇到的话可以添加单引号解决:

image.png

2.2 如何使用‘@env@’?

在上一小节定义的@env@究竟如何使用呢?如下所示,我们需要在项目的pom.xml文件增加如下的配置,如果项目存在module,只需要添加到父工程的pom文件就行了,含义我都写在注释里面了:

<!--配置不同的profile,对应不同的生产环境-->
<profiles>
    <profile>
        <!--开发-->
        <id>dev</id>
        <activation>
            <!--默认开发环境-->
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <!--      自定义的变量名称env作为标签,标签内是我们配置文件不同环境的后缀          -->
            <env>dev</env>
        </properties>
    </profile>
    <profile>
        <!--生产-->
        <id>pro</id>
        <properties>
            <env>pro</env>
        </properties>
    </profile>
    <profile>
        <!--测试-->
        <id>test</id>
        <properties>
            <env>test</env>
        </properties>
    </profile>
</profiles>
复制代码

2.3 重要配置

这个配置是很多网上此类文章没有提到的,我估计的原因是他们的项目本来就有这个配置,所以只加入2.2的配置就好使了。

这针对很多初学者可不友好,所以我把这个配置也列出来放在这里,下次需要用,直接拿去就好了:

<build>
    <plugins>
        <plugin>
            <!--   springboot使用maven打包的插件          -->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
    <resources>
        <resource>
            <!--   指定配置文件的位置  -->
            <directory>src/main/resources</directory>
            <includes>
                <!--   读取resources下的所有文件,include表示指定文件内的,相对的还有excludes ,排除其下的文件 -->
                <include>**/*</include>
            </includes>
            <!-- 开启替换标签,比如我们的'@env'就是通过这个替换的         -->
            <filtering>true</filtering>
        </resource>
    </resources>
</build>
复制代码

2.4 启动项目

全部的配置完成了,我们可以通过如下的方式指定使用哪种环境:

image.png

如上如我们指定的是pro环境,启动项目看看日志输出的内容:

image.png

打包直接咋idea的maven中打包就好了:

image.png

注意打包时第一条日志的最后位置,是我们选择的pro:

image.png

三、总结

至此,整个介绍就结束了,下次在遇到不用到处找了,直接收藏本篇吧。

简述下过程:

  • yml文件中的 spring.profiles.active配置变量 @变量@
  • pom.xml 配置profiles,跟环境数量相同
  • 配置build标签内容资源获取路径,及变量替换

本带源码地址:gitee.com/wei_rong_xi…

猜你喜欢

转载自juejin.im/post/7054348294083854343