zoukankan      html  css  js  c++  java
  • Spring Cloud Nacos分布式配置中心

    Nacos 提供用于存储配置和其他元数据的 key/value 存储,为分布式系统中的外部化配置提供服务器端和客户端支持。使用 Spring Cloud Alibaba Nacos Config,您可以在 Nacos Server 集中管理你 Spring Cloud 应用的外部属性配置。

    Spring Cloud Alibaba Nacos Config 是 Config Server 和 Client 的替代方案,客户端和服务器上的概念与 Spring Environment 和 PropertySource 有着一致的抽象,在特殊的 bootstrap 阶段,配置被加载到 Spring 环境中。当应用程序通过部署管道从开发到测试再到生产时,您可以管理这些环境之间的配置,并确保应用程序具有迁移时需要运行的所有内容。

    实站验证:

    启动好Nacos之后,在Nacos添加如下的配置:

    Data ID:    springboot2-nacos-discovery.properties
    
    Group  :    DEFAULT_GROUP
    
    配置格式:    Properties
    
    配置内容:

    user.name=nacos-config-properties
    user.age=90
    useLocalCache=false

    Note
    注意dataid是以 properties(默认的文件扩展名方式)为扩展名。

    点击发布。

    在 Nacos Spring Cloud 中,dataId 的完整格式如下:

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

    添加依赖:

    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        <version>${latest.version}</version>
    </dependency>

    使用配置,在 bootstrap.properties 中配置

    spring.application.name=springboot2-nacos-discovery
    spring.cloud.nacos.config.server-addr=127.0.0.1:8848

    通过ConfigurableApplicationContext 来调用配置在nacos的配置项

        public static void main(String[] args) {
            
            ConfigurableApplicationContext applicationContext = SpringApplication.run(NacosApplication.class, args);
            String userName = applicationContext.getEnvironment().getProperty("user.name");
            String userAge = applicationContext.getEnvironment().getProperty("user.age");
            System.err.println("user name :"+userName+"; age: "+userAge);
        }

    控制器中也可以直接使用

    package com.xin.cloud.nacos;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.cloud.context.config.annotation.RefreshScope;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    @RequestMapping("/config")
    @RefreshScope
    public class ConfigController {
    
        @Value("${useLocalCache:false}")
        private boolean useLocalCache;
    
        @RequestMapping("/get")
        public boolean get() {
            return useLocalCache;
        }
    }

    验证

    http://localhost:8080/config/get

    支持自定义扩展的 Data Id 配置

    Spring Cloud Alibaba Nacos Config 从 0.2.1 版本后,可支持自定义 Data Id 的配置。关于这部分详细的设计可参考 这里。 一个完整的配置案例如下所示:

    spring.application.name=opensource-service-provider
    spring.cloud.nacos.config.server-addr=127.0.0.1:8848
    
    # config external configuration
    # 1、Data Id 在默认的组 DEFAULT_GROUP,不支持配置的动态刷新
    spring.cloud.nacos.config.extension-configs[0].data-id=ext-config-common01.properties
    
    # 2、Data Id 不在默认的组,不支持动态刷新
    spring.cloud.nacos.config.extension-configs[1].data-id=ext-config-common02.properties
    spring.cloud.nacos.config.extension-configs[1].group=GLOBALE_GROUP
    
    # 3、Data Id 既不在默认的组,也支持动态刷新
    spring.cloud.nacos.config.extension-configs[2].data-id=ext-config-common03.properties
    spring.cloud.nacos.config.extension-configs[2].group=REFRESH_GROUP
    spring.cloud.nacos.config.extension-configs[2].refresh=true

    可以看到:

    • 通过 spring.cloud.nacos.config.extension-configs[n].data-id 的配置方式来支持多个 Data Id 的配置。

    • 通过 spring.cloud.nacos.config.extension-configs[n].group 的配置方式自定义 Data Id 所在的组,不明确配置的话,默认是 DEFAULT_GROUP。

    • 通过 spring.cloud.nacos.config.extension-configs[n].refresh 的配置方式来控制该 Data Id 在配置变更时,是否支持应用中可动态刷新, 感知到最新的配置值。默认是不支持的。

    Note
    多个 Data Id 同时配置时,他的优先级关系是 spring.cloud.nacos.config.extension-configs[n].data-id 其中 n 的值越大,优先级越高。
    Note
    spring.cloud.nacos.config.extension-configs[n].data-id 的值必须带文件扩展名,文件扩展名既可支持 properties,又可以支持 yaml/yml。 此时 spring.cloud.nacos.config.file-extension 的配置对自定义扩展配置的 Data Id 文件扩展名没有影响。

    通过自定义扩展的 Data Id 配置,既可以解决多个应用间配置共享的问题,又可以支持一个应用有多个配置文件。

    为了更加清晰的在多个应用间配置共享的 Data Id ,你可以通过以下的方式来配置:

    # 配置支持共享的 Data Id
    spring.cloud.nacos.config.shared-configs[0].data-id=common.yaml
    
    # 配置 Data Id 所在分组,缺省默认 DEFAULT_GROUP
    spring.cloud.nacos.config.shared-configs[0].group=GROUP_APP1
    
    # 配置Data Id 在配置变更时,是否动态刷新,缺省默认 false
    spring.cloud.nacos.config.shared-configs[0].refresh=true

    可以看到:

    • 通过 spring.cloud.nacos.config.shared-configs[n].data-id 来支持多个共享 Data Id 的配置。

    • 通过 spring.cloud.nacos.config.shared-configs[n].group 来配置自定义 Data Id 所在的组,不明确配置的话,默认是 DEFAULT_GROUP。

    • 通过 spring.cloud.nacos.config.shared-configs[n].refresh 来控制该Data Id在配置变更时,是否支持应用中动态刷新,默认false。

    配置的优先级

    Spring Cloud Alibaba Nacos Config 目前提供了三种配置能力从 Nacos 拉取相关的配置。

    • A: 通过 spring.cloud.nacos.config.shared-configs[n].data-id 支持多个共享 Data Id 的配置

    • B: 通过 spring.cloud.nacos.config.extension-configs[n].data-id 的方式支持多个扩展 Data Id 的配置

    • C: 通过内部相关规则(应用名、应用名+ Profile )自动生成相关的 Data Id 配置

    当三种方式共同使用时,他们的一个优先级关系是:A < B < C

    完全关闭配置

    通过设置 spring.cloud.nacos.config.enabled = false 来完全关闭 Spring Cloud Nacos Config

    源码

    完整源码下载

  • 相关阅读:
    插入排序—希尔排序(Shell`s Sort)原理以及Java实现
    八大排序算法原理以及Java实现(直接插入排序)
    HTTP与HTTPS的区别
    TCP/IP详解学习笔记(4)-ICMP协议,ping和Traceroute【转】
    TCP/IP详解学习笔记(3)-IP协议,ARP协议,RARP协议【转】
    中介者模式-Mediator
    命令模式-command
    桥接模式-Bridge
    迭代器模式-Iterator
    组合模式-Composite
  • 原文地址:https://www.cnblogs.com/starcrm/p/13161906.html
Copyright © 2011-2022 走看看