SpringBoot中根据环境加载不同的配置的方案

前言

我们的中根载一个应用,开发上线,据环境加需要一定的配置流程,比如需要先在测试环境中进行测试,中根载测试环境中有它的据环境加一整套配置,如MySQL、配置Redis、中根载MQ等。据环境加

测试环境测试完毕,配置我们会在预发环境再度测试,中根载最后再上线,据环境加即线上环境。配置每个环境都有他们自己独有的中根载一套配置,而代码逻辑都是据环境加一样,就是配置环境配置不一样而已。

如何低耦合地分离各个环境的配置,就是我们所追求的,下面阐述下SpringBoot中的方案。

方案

我写了个demo,下面是它的代码结构:

1.业务代码

下面假定以下是业务代码,主要就是源码下载从配置文件中读取env的值,并返回出去:

package com.example.configenv.controller; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/") public class EnvController {      @Value("${ env}")     private String env;     @GetMapping("/env")     public String showEnvValue() {          return env;     } } 

2.配置文件

配置文件中,application.yml是一个主配置,即无论如何,都会被加载的,类似SSM时代的spring-config.xml。里边的逻辑,就一个active,就是指定配置环境:

spring:   profiles:     active: dev 

对应其他其他环境的配置,它们有2个点,一个是环境名称on-profile,一个对应环境下的值env。

SpringBoot中根据环境加载不同的配置的方案 原创2021-07-26 17:31·IT小村 前言 我们的一个应用,开发上线,需要一定的流程,比如需要先在测试环境中进行测试,测试环境中有它的一整套配置,如MySQL、Redis、服务器托管MQ等。 测试环境测试完毕,我们会在预发环境再度测试,最后再上线,即线上环境。每个环境都有他们自己独有的一套配置,而代码逻辑都是一样,就是环境配置不一样而已。 如何低耦合地分离各个环境的配置,就是我们所追求的,下面阐述下SpringBoot中的方案。 方案 我写了个demo,下面是它的代码结构: SpringBoot中根据环境加载不同的配置的方案 1.业务代码 下面假定以下是业务代码,主要就是从配置文件中读取env的值,并返回出去: package com.example.configenv.controller; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/") public class EnvController {      @Value("${ env}")     private String env;     @GetMapping("/env")     public String showEnvValue() {          return env;     } } 2.配置文件 配置文件中,application.yml是一个主配置,即无论如何,都会被加载的云服务器提供商,类似SSM时代的spring-config.xml。里边的逻辑,就一个active,就是指定配置环境: spring:   profiles:     active: dev 对应其他其他环境的配置,它们有2个点,一个是环境名称on-profile,一个对应环境下的值env。 application-dev.yml spring:   config:     activate:       on-profile: dev env: 测试环境 

application-online.yml

spring:   config:     activate:       on-profile: pre env: 预发环境 

application-online.yml

spring:   config:     activate:       on-profile: online env: 线上环境 

3.验证效果

当我的主配置文件为如下时,即指定环境为dev测试环境

spring:   profiles:     active: dev 

http://localhost:8080/env

可以看到,加载的是application-dev.yml的配置

而当我的主配置文件是如下时,即加载的是online线上环境

spring:   profiles:     active: online 

http://localhost:8080/env

可以看到,加载的是application-online.yml的配置。

其他

部署应用的时候,我们只需要覆盖application.yml即可,就可以在测试环境、预发环境、线上环境等环境,加载他们对应的配置。

域名
上一篇:DPU全球混战,国内多家崛起
下一篇:在量子计算中,数据中心或云有什么可期待的?