多环境部署项目
不同的环境

本地环境:一般用 local 标识,是指前端或后端独立开发、自主测试的环境。通常就是让项目和依赖在我们自己的电脑上运行,比如数据库、缓存、队列等各种服务,可能需要自己在本地搭建。
开发环境:一般用 dev 标识,是指前端和后端(或者多个程序员)一起协作开发、联调的环境。通常将项目和依赖放在员工电脑可以直接访问的开发机上,不用自己搭建,直接跑起来项目,提高开发和协作效率。对规模不大的团队来说,开发和本地环境其实有一套就够了,毕竟本地也可以连接公用的数据库等服务。
测试环境:一般用 test 标识,是指前端和后端开发和联调完成,做出完整的新功能后,交给测试人员找 Bug 的环境。通常在测试环境需要有独立的测试数据库和其他服务。每次修改完 Bug 后,也都要再次发布项目到测试环境,让测试人员重新验证。

预发布环境:一般用 pre 标识,这是和线上项目最接近的环境,一般是测试验证通过、产品经理体验过后,才能将项目发布到这个环境。实际上,预发布环境的项目调用的后端接口、连接的数据库、服务等都和线上项目一致 ,和线上唯一的区别就是前端访问的域名不同。正因如此,预发布环境看到的都是真实的用户数据,可以发现更多测试环境因为数据不足而没查出来的 Bug。
生产环境:一般用 prod 标识,又叫线上环境,是给所有真实用户使用的环境。因此不能随意修改,且发布项目到该环境时必须格外小心。线上的数据库、机器等资源一般也是由专业的运维来负责,想要登录机器、修改配置,都需要经过严格审批。
多环境的目的是,让同一套代码在不同的开发阶段时,根据实际环境调整相应的配置。
可以调整配置的地方
最基本的流程为,我们需要在程序中写好读取环境变量的代码,然后在打包阶段指定环境即可。
常见的需要多环境配置的变量:
- 本地日志级别
- 数据库连接参数
- JVM 参数
程序中编写读入环境变量的代码:
1 | // 读取 env 参数 |
在最后的编译打包环节中,通过注入参数指定环境。
1 | 测试环境 |
SpringBoot 多环境配置
项目依赖多环境
引入项目依赖时,可通过 <scope> 字段指定不同环境中需要引入的依赖,通过这种方式可以精简生成环境中项目的依赖,减少体积。常见字段有 test、compile。
1 | <!--测试环境--> |
激活不同的配置文件
我们可以通过配置文件化的方式实现不同环境中的配置。在配置文件加入后缀即可区分多环境应用的配置文件:
application.yml表示公共配置application-dev.yml表示开发环境的额外配置application-prod.yml表示生产环境的额外配置

Maven 执行打包命令(IDEA 右侧 Maven 工具栏 -> Lifecycle -> package)后,会在 target 文件夹中生成 jar 包。我们可以用环境参数运行这个 jar 包,这样就能实现多环境的切换。
进行打包时需要引入 spring-boot-maven-plugin。不过基于官方骨架创建项目,会自动添加这个插件。
打包时可以在 IDEA 的 Maven 命令面板中选择
Skip Tests禁掉单元测试。
1 | 检查 Java 安装情况 |
当然,打包环节也可以传入环境参数,只不过这样就没有那么灵活。
我们可以通过看 SpringBoot 的启动日志查看哪个配置文件生效了:

Umi 多环境配置
官方文档参考:环境变量





