好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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即可,就可以在测试环境、预发环境、线上环境等环境,加载他们对应的配置。

原文链接:https://HdhCmsTesttoutiao测试数据/i6989159134088233484/

查看更多关于SpringBoot中根据环境加载不同的配置的方案的详细内容...

  阅读:13次