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

前言

我们的一个应用,开发上线,需要一定的流程,比如需要先在测试环境中进行测试,测试环境中有它的一整套配置,如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-pre.yml

spring:
  config:
    activate:
      on-profile: pre

env: '预发环境'

application-online.yml

spring:
  config:
    activate:
      on-profile: online

env: '线上环境'

3.验证效果

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

spring:
  profiles:
    active: dev

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

http://localhost:8080/env

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

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

spring:
  profiles:
    active: online

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

http://localhost:8080/env

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

其他

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值