摘要生成中...
AI 摘要
Hunyuan-lite

不同的环境

image.png

本地环境:一般用 local 标识,是指前端或后端独立开发、自主测试的环境。通常就是让项目和依赖在我们自己的电脑上运行,比如数据库、缓存、队列等各种服务,可能需要自己在本地搭建。

开发环境:一般用 dev 标识,是指前端和后端(或者多个程序员)一起协作开发、联调的环境。通常将项目和依赖放在员工电脑可以直接访问的开发机上,不用自己搭建,直接跑起来项目,提高开发和协作效率。对规模不大的团队来说,开发和本地环境其实有一套就够了,毕竟本地也可以连接公用的数据库等服务。

测试环境:一般用 test 标识,是指前端和后端开发和联调完成,做出完整的新功能后,交给测试人员找 Bug 的环境。通常在测试环境需要有独立的测试数据库和其他服务。每次修改完 Bug 后,也都要再次发布项目到测试环境,让测试人员重新验证。

image.png

预发布环境:一般用 pre 标识,这是和线上项目最接近的环境,一般是测试验证通过、产品经理体验过后,才能将项目发布到这个环境。实际上,预发布环境的项目调用的后端接口、连接的数据库、服务等都和线上项目一致 ,和线上唯一的区别就是前端访问的域名不同。正因如此,预发布环境看到的都是真实的用户数据,可以发现更多测试环境因为数据不足而没查出来的 Bug。

生产环境:一般用 prod 标识,又叫线上环境,是给所有真实用户使用的环境。因此不能随意修改,且发布项目到该环境时必须格外小心。线上的数据库、机器等资源一般也是由专业的运维来负责,想要登录机器、修改配置,都需要经过严格审批。

多环境的目的是,让同一套代码在不同的开发阶段时,根据实际环境调整相应的配置。

可以调整配置的地方

最基本的流程为,我们需要在程序中写好读取环境变量的代码,然后在打包阶段指定环境即可。

常见的需要多环境配置的变量:

  • 本地日志级别
  • 数据库连接参数
  • JVM 参数

程序中编写读入环境变量的代码:

1
2
3
// 读取 env 参数
String env = System.getProperty("env");
new DBConfig("db-" + env + ".properties");

在最后的编译打包环节中,通过注入参数指定环境。

1
2
3
4
# 测试环境
java -jar -Denv=test dist.jar
# 生产环境
java -jar -Dend=prod dist.jar

SpringBoot 多环境配置

项目依赖多环境

引入项目依赖时,可通过 <scope> 字段指定不同环境中需要引入的依赖,通过这种方式可以精简生成环境中项目的依赖,减少体积。常见字段有 testcompile

1
2
3
4
5
6
<!--测试环境-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>

激活不同的配置文件

我们可以通过配置文件化的方式实现不同环境中的配置。在配置文件加入后缀即可区分多环境应用的配置文件:

  • application.yml 表示公共配置
  • application-dev.yml 表示开发环境的额外配置
  • application-prod.yml 表示生产环境的额外配置

image.png

Maven 执行打包命令(IDEA 右侧 Maven 工具栏 -> Lifecycle -> package)后,会在 target 文件夹中生成 jar 包。我们可以用环境参数运行这个 jar 包,这样就能实现多环境的切换。

SpringBoot 项目打包操作依赖

进行打包时需要引入 spring-boot-maven-plugin。不过基于官方骨架创建项目,会自动添加这个插件。

打包时可以在 IDEA 的 Maven 命令面板中选择 Skip Tests 禁掉单元测试。

1
2
3
4
# 检查 Java 安装情况
java --version
# 指定 prod 生产环境
java -jar .\your-project-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod

当然,打包环节也可以传入环境参数,只不过这样就没有那么灵活。

我们可以通过看 SpringBoot 的启动日志查看哪个配置文件生效了:

image.png

Umi 多环境配置

官方文档参考:环境变量

本文参考