springCloud Alibaba之配置中心

配置中心Nacos Config

为什么要使用配置中心?

先看看在我们没有使用配置中心之前存在的问题:

1.数据库账号密码放在本地配置中不安全

2.不能对更改的配置进行动态刷新

3.修改配置后没有历史记录

4.切换开发环境相对麻烦

5.无法对公共配置进行共享

小结:在我们微服务架构中,随着微服务越来越多,如果不使用配置中心进行统一管理,对于我们开发人员来说是非常不友好的,所以我们可以通过灵活的使用配置中心,减少我们的开发成本,提高项目的可维护性。

配置中心的思想(大白话)

使用Nacos作为配置中心,相当于把Nacos当做有个服务端,将各个微服务看成是客户端,我们将各个微服务的配置文件统一存放在Nacos上,然后各个微服务从Nacos上拉取配置即可

Nacos Config入门案例

1.先搭建Nocos环境,如果不知道如何搭建可以看下往期分享springCloud Alibaba之Nacos组件

2.在微服务中添加Nacos的依赖

<dependency>
	<groupId>com.alibaba.cloud</groupId>
	<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> 
</dependency>

3.在微服务中添加nacos config的配置

注意:不能使用原来的application.yml作为配置文件,而是新建一个bootstrap.yml作为配置文件

配置文件优先级(由高到低):
bootstrap.properties -> bootstrap.yml -> application.properties -> application.yml
spring:
  application:
    name: product-service    #微服务名称①
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848 #nacos中心地址
        file-extension: yaml # 配置文件格式③
  profiles: 
  	active: dev # 环境标识②

4.在nacos中添加配置,然后把商品微服务application.yml配置复制到配置内容中.

在这里插入图片描述

在这里插入图片描述

5.注释本地的application.yam中的内容, 启动程序进行测试

6.如果成功访问程序,说明我们nacos的配置中心功能已经实现

Nacos config之配置动态刷新

上面的案例已经实现了把配置存放到配置中心了,但是如果我们修改了配置中心的配置,此时如果想让配置生效,那么还是需要重启才能生效,所以接下来我们看下如何在不重启的情况下让配置动态刷新。

  1. 在nacos中的product-service-dev.yaml配置项中添加下面配置:

    appConfig:
      name: product2020
    
  2. 在商品微服务中新增NacosConfigControlller.java

    @RestController
    @RefreshScope    //记得贴上该注解,当配置发生变更时进行热部署
    public class NacosConfigController {
        @Value("${appConfig.name}")
        private String appConfigName;
        
        @RequestMapping("/config")
        public String config(){
            return "远程信息:"+appConfigName;
        }
    }
    

3.重启项目=>访问/config接口,看到product2020

4.修改nacos中的product-service-dev.yaml配置项中添加下面配置:

appConfig:
  name: product2021

5.如果再次访问/config接口,显示product2021,证明动态刷新已经成功了

配置共享
同一个微服务,不同开发环境之间共享配置

在实现之前,先做个铺垫:克隆一个test环境的配置,假如跟dev环境只有端口号是不同的,看下图:

在这里插入图片描述

如果想在同一个微服务的不同环境之间实现配置共享,其实很简单。只需要提取一个以 spring.application.name 命名的配置文件,然后将其所有环境的公共配置放在里面即可。

  1. 新建一个名为product-service.yaml配置存放商品微服务的公共配置,把之前的公共配置都存放进去.
    在这里插入图片描述

  2. 新建一个名为product-service-test.yaml配置存放测试环境的配置

在这里插入图片描述

  1. 新建一个名为product-service-dev.yaml配置存放测试环境的配置

在这里插入图片描述

  1. 需要的配置信息具体如下:

在这里插入图片描述

  1. 在NacosConfigController.java中新增如下逻辑

    @RestController
    @RefreshScope
    public class NacosConfigController {
        @Value("${appConfig.name}")
        private String appConfigName;
        @Value("${env}")
        private String env;
        
        @RequestMapping("/config")
        public String config(){
            return "远程信息:"+appConfigName;
        }
        @RequestMapping("/config2")
        public String config2(){
            return "公共配置:"+appConfigName+",环境配置信息:"+env;
        }
    }
    
  2. 通过修改环境,参看是否可以读取公共配置和环境独有配置

在这里插入图片描述

7.最后可以来回切换环境,测试是否成功,如果成功的话可以看到env的值是dev/test

不同微服务之间共享配置

不同为服务之间实现配置共享的原理类似于文件引入,就是定义一个公共配置,然后在当前配置中引

入。

  1. 在nacos中定义一个DataID为global-config.yaml的配置,用于所有微服务共享

    globalConfig: global
    

在这里插入图片描述

  1. 修改bootstrap.yaml

    spring:
      application:
        name: product-service
      cloud:
        nacos:
          config:
            server-addr: 127.0.0.1:8848 #nacos中心地址
            file-extension: yaml # 配置文件格式
            shared-configs:
              - data-id: global-config.yaml # 配置要引入的配置
                refresh: true
      profiles:
        active: test # 环境标识
    
  2. 在NacosConfigController.java中新增一个方法

    @RestController
    @RefreshScope
    public class NacosConfigController {
        @Value("${appConfig.name}")
        private String appConfigName;
        @Value("${env}")
        private String env;
        @Value("${globalConfig}")
        private String globalConfig;
        
        @RequestMapping("/config")
        public String config(){
            return "远程信息:"+appConfigName;
        }
        @RequestMapping("config2")
        public String config2(){
            return "公共配置:"+appConfigName+",环境配置信息:"+env;
        }
        @RequestMapping("config3")
        public String config3(){
            return "全局配置:"+globalConfig+",公共配置:"+appConfigName+",环境配置信息:"+env;
        }
    }
    
  3. 重启服务,访问/config3 进行测试.

总结:到这里我们已经解决了我们开篇时说到的,如果不用配置中心存在的所有问题了,比如不能动态刷新配置,账号密码配置在本地不安全,不能共享配置导致难以维护,切换环境相对麻烦,没有修改配置的历史记录…

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值