SpringBoot3多环境配置

发布时间 2023-11-06 11:19:37作者: zhao-XH

SpringBoot3多环境配置


前言

这篇文章是我在学习SpringBoot3时对多环境配置概念学习的记录,以便日后遗忘查阅;


目录


一、如何理解多环境配置

1.什么是软件运行环境

软件开发中经常提到环境这个概念,与日常生活中的环境概念一样。环境影响人的居住体验。影响软件运行的也叫做环境,例如应用中访问数据库的ip,用户名和密码,Redis 的端口,配置文件的路径,windows, linux 系统,tomcat服务器等等。围绕着程序周围的都是环境。环境影响软件的运行。

2.为什么要设立多个软件运行环境

我们可以给编写好的代码提供不同的运行环境,例如开发环境、生产环境、测试环境等;那么我们为什么又要这样做呢?

我们从容易理解的数据库环境配置来进行举例。

当我们在开发代码时,我们要连接一个数据库,导入相应表结构,至于其中提供用于开发进行逻辑判断的数据,不一定是真实可靠的,只要数据逻辑不混乱,开发就可以进行。

那么,当我们阶段性开发好的代码需要测试时,测试人员一般会用各种可能触发bug的手段去输入数据,这很显然,数据更不会是生产环境所需的真实数据。

而当我们经历了开发、测试等一系列阶段后,准备上线我们的项目了,我们就需要一个新的数据库环境,确保其中维护的数据真实可靠。

那么在这三个阶段中,我们可以设立三个数据库环境,分别写到不同的配置文件当中,通过主配置文件的属性,来进行数据库环境的切换。在这种场景下使用多环境能够方便解决这个问题。

二、如何在SpringBoot中进行运行环境切换

1.SpringBoot关于环境切换约定

SpringBoot规定环境文件的名称:application-{profile}.properties(yml)
其中profile为自定义的环境名称,推荐使用dev表示开发,test表示测试,prod表示生产,feature表示特性。总是profile名称是自定义的。SpringBoot会加载application以及application-{profile}两类文件,不是只单独加载application-{profile}。

2.SpringBoot多环境切换实操

1.先在resources目录下创建主配置文件,以及你需要配置的相应环境配置文件。这里我用开发、生产、测试三个环境进行演示。

image-20231103153353432

application.yml

server:
  # tomcat服务启动时端口号
  port: 21208

spring:
  profiles:
    # 选择要激活的配置文件,和对应配置文件中on-profile属性值对应。
    active: dev

application-dev.yml

myapp:
  memo: 这是开发环境的配置文件

spring:
  config:
    activate:
      on-profile: dev

application-prod.yml

myapp:
  memo: 这是生产环境的配置文件

spring:
  config:
    activate:
      on-profile: prod

application-test.yml

myapp:
  memo: 这是测试环境的配置文件

spring:
  config:
    activate:
      on-profile: test

2.默认不激活环境配置文件,程序只加载application.yml配置文件。控制台打印显示如下。

Application    	: No active profile set, falling back to 1 default profile: "default"
TomcatWebServer : Tomcat initialized with port(s): 21208 (http)

3.切换激活配置文件测试。

Controller

@Slf4j
@RestController
@RequestMapping({"Test"})
public class TestController {

    @Value("${myapp.memo}")
    private String memo;

    @GetMapping("print")
    public void print(){
        log.info(memo);
    }

}

主配置文件配置active: dev

控制台打印如下:

Application    	: The following 1 profile is active: "dev"
TomcatWebServer : Tomcat initialized with port(s): 21208 (http)
TestController  : 这是开发环境的配置文件

主配置文件配置active: prod

控制台打印如下:

Application    	: The following 1 profile is active: "prod"
TomcatWebServer : Tomcat initialized with port(s): 21208 (http)
TestController  : 这是生产环境的配置文件

主配置文件配置active: test

控制台打印如下:

Application    	: The following 1 profile is active: "test"
TomcatWebServer : Tomcat initialized with port(s): 21208 (http)
TestController  : 这是测试环境的配置文件