「这是我参与2022首次更文挑战的第1天,活动详情查看:2022首次更文挑战」。
最近在回顾springCloud + nacos的环境搭建,希望整合所有常用的组件,练手的同时也给他家增强下记忆力。
过程中我发现一个比较坑的地方,就是【idea+maven】多环境配置,当然我也记不住,随便从网上找了几篇看看,发现这些文章丢三落四的,没一个是完整的,所以我特意整理此篇文章,希望大家不要再被坑了。
一、简介
对于java项目,尤其是使用springboot,maven等框架,通常会涉及到多个环境,开发环境
,测试环境
,生产环境
等。记得当初我在亚信工作时,除了上述的三套环境,还有一个预发布环境
。当时项目还是使用的SSM(spring + springMVC + mybatis)
的环境,jar通过手动导入的方式。再配合上eclipse那个蛋疼的的打包方式,真的是很痛苦。
后来随着技术的进步,项目架构逐渐开始向springboot
转变,各种jar包版本工具,如maven
,gradle
等开始进入工作中。此时我才发现,写代码可以这么舒服。
idea的各种插件,以及性能,我感觉甩了eclipse好几条街,用过就再也不能回去了。
我使用maven相比gradle要多一些,从一开始的摸索,到开始了解nexus
,了解package
、install
、deploy
的区别,使我再也不用回到那个手动导入jar的情形。
idea + maven的组合,更是极大的能够提升工作效率。我们只需要手动的选择需要打包的环境配置,然后再运行代码、打包的时候,可以自动的使用该环境配置,而不需要去修改配置文件了,减少错误的发生。
二、动手操作
2.1 spring.profiles.active配置
假设我们有如下的三个环境,开发dev、测试test、生产pro:
如上图,我们的配置文件命名方式是application-环境.yml
springboot提供如下的配置,让我们可以指定使用哪个配置文件:
spring:
profiles:
active: dev
复制代码
如上所示,我们每次切换环境必然要修改其值,很是不变。所以我们通过在yml文件中配置变量的形式。在yml中使用变量的方式如下:
@变量@
复制代码
我定义的变量如下:
spring:
profiles:
active: '@env@'
复制代码
为什么添加单引号?
如果不添加的话,程序启动无法识别,会报错导致启动失败,遇到的话可以添加单引号解决:
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 启动项目
全部的配置完成了,我们可以通过如下的方式指定使用哪种环境:
如上如我们指定的是pro
环境,启动项目看看日志输出的内容:
打包直接咋idea的maven中打包就好了:
注意打包时第一条日志的最后位置,是我们选择的pro:
三、总结
至此,整个介绍就结束了,下次在遇到不用到处找了,直接收藏本篇吧。
简述下过程:
- yml文件中的 spring.profiles.active配置变量 @变量@
- pom.xml 配置profiles,跟环境数量相同
- 配置build标签内容资源获取路径,及变量替换
本带源码地址:gitee.com/wei_rong_xi…