SpringBoot中根據(jù)環(huán)境加載不同的配置的方案
前言
我們的一個(gè)應(yīng)用,開(kāi)發(fā)上線,需要一定的流程,比如需要先在測(cè)試環(huán)境中進(jìn)行測(cè)試,測(cè)試環(huán)境中有它的一整套配置,如MySQL、Redis、MQ等。
測(cè)試環(huán)境測(cè)試完畢,我們會(huì)在預(yù)發(fā)環(huán)境再度測(cè)試,最后再上線,即線上環(huán)境。每個(gè)環(huán)境都有他們自己獨(dú)有的一套配置,而代碼邏輯都是一樣,就是環(huán)境配置不一樣而已。
如何低耦合地分離各個(gè)環(huán)境的配置,就是我們所追求的,下面闡述下SpringBoot中的方案。
方案
我寫(xiě)了個(gè)demo,下面是它的代碼結(jié)構(gòu):
1.業(yè)務(wù)代碼
下面假定以下是業(yè)務(wù)代碼,主要就是從配置文件中讀取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是一個(gè)主配置,即無(wú)論如何,都會(huì)被加載的,類(lèi)似SSM時(shí)代的spring-config.xml。里邊的邏輯,就一個(gè)active,就是指定配置環(huán)境:
- spring:
- profiles:
- active: dev
對(duì)應(yīng)其他其他環(huán)境的配置,它們有2個(gè)點(diǎn),一個(gè)是環(huán)境名稱(chēng)on-profile,一個(gè)對(duì)應(yīng)環(huán)境下的值env。
- SpringBoot中根據(jù)環(huán)境加載不同的配置的方案
- 原創(chuàng)2021-07-26 17:31·IT小村
- 前言
- 我們的一個(gè)應(yīng)用,開(kāi)發(fā)上線,需要一定的流程,比如需要先在測(cè)試環(huán)境中進(jìn)行測(cè)試,測(cè)試環(huán)境中有它的一整套配置,如MySQL、Redis、MQ等。
- 測(cè)試環(huán)境測(cè)試完畢,我們會(huì)在預(yù)發(fā)環(huán)境再度測(cè)試,最后再上線,即線上環(huán)境。每個(gè)環(huán)境都有他們自己獨(dú)有的一套配置,而代碼邏輯都是一樣,就是環(huán)境配置不一樣而已。
- 如何低耦合地分離各個(gè)環(huán)境的配置,就是我們所追求的,下面闡述下SpringBoot中的方案。
- 方案
- 我寫(xiě)了個(gè)demo,下面是它的代碼結(jié)構(gòu):
- SpringBoot中根據(jù)環(huán)境加載不同的配置的方案
- 1.業(yè)務(wù)代碼
- 下面假定以下是業(yè)務(wù)代碼,主要就是從配置文件中讀取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是一個(gè)主配置,即無(wú)論如何,都會(huì)被加載的,類(lèi)似SSM時(shí)代的spring-config.xml。里邊的邏輯,就一個(gè)active,就是指定配置環(huán)境:
- spring:
- profiles:
- active: dev
- 對(duì)應(yīng)其他其他環(huán)境的配置,它們有2個(gè)點(diǎn),一個(gè)是環(huán)境名稱(chēng)on-profile,一個(gè)對(duì)應(yīng)環(huán)境下的值env。
- application-dev.yml
- spring:
- config:
- activate:
- on-profile: dev
- env: '測(cè)試環(huán)境'
application-online.yml
- spring:
- config:
- activate:
- on-profile: pre
- env: '預(yù)發(fā)環(huán)境'
application-online.yml
- spring:
- config:
- activate:
- on-profile: online
- env: '線上環(huán)境'
3.驗(yàn)證效果
當(dāng)我的主配置文件為如下時(shí),即指定環(huán)境為dev測(cè)試環(huán)境
- spring:
- profiles:
- active: dev
http://localhost:8080/env
可以看到,加載的是application-dev.yml的配置
而當(dāng)我的主配置文件是如下時(shí),即加載的是online線上環(huán)境
- spring:
- profiles:
- active: online
http://localhost:8080/env
可以看到,加載的是application-online.yml的配置。
其他
部署應(yīng)用的時(shí)候,我們只需要覆蓋application.yml即可,就可以在測(cè)試環(huán)境、預(yù)發(fā)環(huán)境、線上環(huán)境等環(huán)境,加載他們對(duì)應(yīng)的配置。