您的位置:首页 > 编程语言 > Java开发

SpringCloud Alibaba —— Nacos 配置中心

2020-07-12 16:34 155 查看

前文

SpringCloud 简介

SpringCloud 版本选型

SpringCloud 工程构建

SpringCloud —— Eureka 注册中心

SpringCloud —— Eureka 集群

SpringCloud —— 服务注册进 Eureka 集群

SpringCloud —— Eureka 自我保护

SpringCloud —— SpringCloud Consul 实现服务注册中心

SpringCloud —— 三个注册中心的异同点

SpringCloud —— Ribbon

SpringCloud —— Ribbon 负载均衡算法

SpringCloud —— OpenFeign

SpringCloud —— Hystrix 简介

SpringCloud —— Hystrix 断路器

SpringCloud —— HystrixDashboard 服务监控

SpringCloud —— Gateway 网关

SpringCloud —— Config 配置中心

SpringCloud —— Sleuth 分布式请求链路跟踪

SpringCloud Alibaba —— Nacos 服务注册

文章目录

  • 主启动类
  • 业务类
  • 在 Nacos 中添加配置信息
  • 测试
  • 自带刷新功能

  •     前面使用 SpringCloud Config 实现配置中心 的时候是比较麻烦的,各种配置和依赖很复杂的

        SpringCloud Alibaba 退出的 Nacos 除了可以实现注册中心以外,还可以实现配置中心,而且实现非常简单,下面就用 Nacos 实现配置中心

    基础配置

    新建一个模块

    目录结构如下:

    POM

    老规矩,不需添加的依赖可以不加

    <dependencies>
    
    <!-- Nacos Config -->
    <dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>
    
    <!-- SpringCloud Alibaba Nacos-->
    <dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    
    <!-- SpringBoot整合Web组件 -->
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <!--日常通用jar包配置-->
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <scope>runtime</scope>
    <optional>true</optional>
    </dependency>
    <dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
    </dependency>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
    </dependency>
    <dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>RELEASE</version>
    <scope>test</scope>
    </dependency>
    <dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>RELEASE</version>
    <scope>test</scope>
    </dependency>
    </dependencies>

    YML

    这里需要配置两个 yml 文件,为什么需要配置两个 yml 文件呢?

    Nacos 与 SpringCloud-Config 一样,在项目初始化时,要保证先从配置中心进行配置权限,拉取配置之后,才能保证项目的正常启动

    SpringBoot 中配置文件的加载是存在优先级顺序的,bootstrap 优先级高于 application

    bootstrap.yml

    # Nacos 配置
    server:
    port: 3377
    
    spring:
    application:
    name: nacos-config-client
    cloud:
    nacos:
    discovery:
    server-addr: localhost:8848 # Nacos 服务注册中心地址
    config:
    server-addr: localhost:8848 # Nacos 作为配置中心地址
    file-extension: yaml        # 指定 yaml 格式的配置(类似去 Github 读取文件)
    
    # ${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}

    application.yml

    spring:
    profiles:
    active: dev # 表示开发环境

    主启动类

    package com.java.springcloud.alibaba;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    
    /**
    * @author Woo_home
    * @create 2020/5/20 16:27
    */
    
    @EnableDiscoveryClient
    @SpringBootApplication
    public class NacosConfigClientMain3377 {
    public static void main(String[] args){
    SpringApplication.run(NacosConfigClientMain3377.class, args);
    }
    }

    业务类

    package com.java.springcloud.alibaba.controller;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.cloud.context.config.annotation.RefreshScope;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    /**
    * @author Woo_home
    * @create 2020/5/20 16:27
    */
    
    @RestController
    @RefreshScope   // 支持 Nacos 的动态刷新功能
    public class ConfigController {
    
    @Value("${config.info}")
    private String configInfo;
    
    @GetMapping("/config/info")
    public String getConfigInfo() {
    return configInfo;
    }
    }

    在 Nacos 中添加配置信息

    Nacos 中的匹配规则

    理论:

    Nacos 中的 Data Id 的组成格式及与 SpringBoot 配置文件中的匹配规则


    看下 Nacos 是怎么介绍的,官网地址 https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html

    • prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
    • spring.profile.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当 spring.profile.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 prefix.{prefix}.prefix.{file-extension}
    • file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型

    公式:

    ${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}

    公式图解:

    实操:

    Nacos 的该界面 点击加号,添加配置

    按照官网的说明配置一下

    配置完后点击发布按钮


    此时回到主页面,已经将刚才的配置添加进来了

    点击详情选项发现内容和刚刚配置的是一致的

    点击编辑选项还可以对刚刚的配置内容进行修改

    测试

    • 启动前需要在 Nacos 客户端 - 配置管理 - 配置管理栏目下有对应的 yaml 配置文件
    • 运行 cloud-config-nacos-client3377 的主启动类
    • 调用接口查看配置信息 http://localhost:3377/config/info

    启动主启动类的时候报错了,说无法解析这个 config.info

    原因是因为这个文件名不是 yaml 后缀,这里有点小 bug(但是有些人的是没问题的,可能是 Nacos 及时修复了,据说 1.2.0 以后已经解决了这个问题,我这里使用的是 1.1.4 版本的)

    删除该配置文件重新新建一个配置文件,如下:


    修改之后再次启动主启动类,可以发现,控制台打印了 dataid 的信息

    然后我们访问 http://localhost:3377/config/info ,可以发现,我们在 Nacos 配置中心的内容已经拿过来了

    自带刷新功能

    OK ,现在已经可以从 Nacos 配置中心将内容拿过来了,那么想修改一下配置的内容怎么办呢?非常简单,点击编辑该配置文件修改配置内容就可以了

    这里讲 version = 1 改为 version = 1.0,然后保存发布一下

    再次刷新该页面 http://localhost:3377/config/info

    这样就实现了一个动态刷新的功能

    完整代码已上传至码云 完整代码地址,感兴趣的朋友可以下载运行下

    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: 
    相关文章推荐