SpringBoot中根据环境Redis、MQ等加载不同配置的解决方案。测试环境测试完后,我们再在预发布环境中测试,最后上线,即线上环境。每个环境都有自己独特的一套配置,代码逻辑相同,只是环境配置不同。如何以低耦合的方式分离各个环境的配置,是我们所追求的。下面介绍SpringBoot中的解决方案。方案我写了一个demo,下面是它的代码结构:1.业务代码假设下面是业务代码,主要是从配置文件中读取env的值并返回:packagecom.example.configenv.controller;导入组织;@RestController@RequestMapping("/")publicclassEnvController{@Value("${env}")privateStringenv;@GetMapping("/env")publicStringshowEnvValue(){returnenv;}}2.配置文件在配置文件中,应用。yml是一个mainConfiguration,也就是无论如何都会加载,类似于SSM时代的spring-config.xml。里面的逻辑就一个active,就是指定配置环境:spring:profiles:active:dev对应其他环境的配置。他们有2点,一是profile上的环境名,二是对应环境中的值env。SpringBoot中根据环境加载不同配置的方案原创2021-07-2617:31ITKomura前言我们的一个应用需要经过一定的流程才能开发上线。比如需要先在测试环境中进行测试,在测试环境中有一套完整的配置,比如MySQL、Redis、MQ等,测试环境测试完成后,我们再进行测试预发布环境,最后上线,即线上环境。每个环境都有自己独特的一套配置,代码逻辑相同,只是环境配置不同。如何以低耦合的方式分离各个环境的配置,是我们所追求的。下面介绍SpringBoot中的解决方案。方案我写了一个demo,下面是它的代码结构:SpringBoot中根据环境加载不同配置的方案1.业务代码假设以下是业务代码,主要是从中读取env的值配置文件并返回它:packagecom.example.configenv.controller;importorg.springframework.beans.factory.annotation.Value;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RestController;@RestController@RequestMapping("/")publicclassEnvController{@Value("${env}")privateStringenv;@GetMapping("/env")publicStringshowEnvValue(){returnenv;}}2.配置文件配置文件中,application.yml是一个主要的配置,也就是无论如何都会加载,类似于SSM时代的spring-config.xml。里面的逻辑就一个active,就是指定配置环境:spring:profiles:active:dev对应其他环境的配置。他们有2点,一是profile上的环境名,二是对应环境中的值env。application-dev.ymlspring:config:activate:on-profile:devenv:'测试环境'application-online.ymlspring:config:activate:on-profile:preenv:'预发布环境'application-online.ymlspring:config:activate:on-profile:onlineenv:'onlineenvironment'3.验证效果当我的主配置文件如下,即指定环境为dev测试环境spring:profiles:active:devhttp://localhost:8080/可以看到env到了,加载了application-dev.yml的配置当我的主配置文件如下,也就是加载了线上环境spring:profiles:active:onlinehttp://localhost:8080/env,可以看出,加载的是application-online.yml的配置。在部署其他应用时,我们只需要覆盖application.yml,即可在测试环境、预发布环境、线上环境等环境中加载它们对应的配置。
