Spring Cloud Alibaba系列(4)之:nacos配置管理

目录

传送门

Nacos config

配置放在系统工程中

配置放在系统外部

 分布式带来的配置管理问题

快速开始

版本选择

Nacos 服务端初始化

客户端使用方式

支持yaml文件

支持配置的动态更新

支持自定义 namespace 的配置


传送门

Spring Cloud Alibaba系列之nacos:(1)安装

Spring Cloud Alibaba系列之nacos:(2)单机模式支持mysql

Spring Cloud Alibaba系列之nacos:(3)服务注册发现

由于之前已经有了springboot项目,并把它改造为了spring cloud,集成nacos做了服务注册发现。

这里在使用一下nacos的配置管理功能

Nacos config

看一下官方对它的功能描述

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 config用做分布式配置管理
  • 是用于替代Spring cloud组件中的config组件的

对于应用程序来说,一般配置文件都是必不可少的,不论是系统配置文件,比如

  • jdbc连接信息,redis连接信息,nacos server地址等
  • 外部系统调用地址,域名等

还是业务配置,比如

  • 系统黑白名单,灰度策略等
  • 功能开关等
  • 甚至是一些营销显示方案等

这些既可以放在系统工程中,跟着程序打包部署,也可以放在外部配置,比如db或者git上面。

而系统配置放在什么地方,也是随着系统的演进及特点不断变化

配置放在系统工程中

最开始是单体系统时,在单机部署情况下,系统配置可以放在系统工程中,比如就是一个java的properties配置文件,里面配置了db等连接信息,应用程序启动时,将配置文件读取进程序中

但是这样会带来一个问题时,如果要改动配置信息会比较麻烦,需要重新打包部署

配置放在系统外部

单体系统时,在单机部署情况下,如果要更改配置信息,这个时候需要重新打包部署,所以可以把配置文件到系统外部,比如db或单独的配置文件,系统运行时,动态读取,甚至做成外部的配置服务,通过接口调用来获取,这样更新就不会导致应用重新打包部署

 分布式带来的配置管理问题

等系统如果单机支撑不了的时候,往往会用集群部署。这个时候,如果需要更新配置文件,需要在每一个节点都要进行更新;并且伴随着服务化,应用会越来越多,配置也成倍增加。所以需要一个统一的分布式配置管理系统来集中管理配置。比如开源的diamond,apollo,以及spring cloud config。

Spring Cloud Alibaba的nacos也提供了类似服务

快速开始

还是以上一节的代码为例,进行集成nacos config

版本选择

引入maven版本

<!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-config -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    <version>2021.1</version>
</dependency>

Nacos 服务端初始化

先在nacos sever控制台新增一个配置文件,相关信息

Data ID:    nacos-config.properties

Group  :    DEFAULT_GROUP

配置格式:    Properties

配置内容:   user.name=nacos-config-properties
            user.age=90

添加好了之后,如下

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

客户端使用方式

必须使用 bootstrap.properties 配置文件来配置Nacos Server 地址,例如:

bootstrap.properties

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

然后在启动时,获取一下配置信息并打印

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

可以在控制台查看,具体有哪些客户端应用在读取这分文件

支持yaml文件

spring-cloud-starter-alibaba-nacos-config 对于 yaml 格式也是完美支持的。这个时候只需要完成以下两步:

  • 在应用的 bootstrap.properties 配置文件中显示的声明 dataid 文件扩展名

如下所示bootstrap.properties

spring.cloud.nacos.config.file-extension=yaml

在 Nacos 的控制台新增一个dataid为yaml为扩展名的配置,如下所示:

Data ID:        auth.yaml

Group  :        DEFAULT_GROUP

配置格式:        YAML

配置内容:        user.name: nacos-config-yaml
                user.age: 68

添加好了之后,如下

 然后在启动时,获取一下配置信息并打印,跟上面效果对比五。

这里要解释一下下面这个格式配置,表示指定配置文件是什么格式,如果是yaml文件则为yaml

spring.cloud.nacos.config.file-extension

那上面的properties文件为什么不用指定呢?因为默认是properties文件的,所以可以不指定

支持配置的动态更新

spring-cloud-starter-alibaba-nacos-config 也支持配置的动态更新,创建一个controller来测试一下

@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController {

    @Value("${useLocalCache:false}")
    private boolean useLocalCache;

    /**
     * http://localhost:8080/config/get
     */
    @RequestMapping("/get")
    public boolean get() {
        return useLocalCache;
    }
}

在刚才的配置文件里面加上useLocalCache: true

 请求一下http://localhost:8080/config/get,会显示true,然后控制台修改useLocalCache: false,再次请求,会发现值显示为false了,表示动态修改配置文件刷新了

如果修改配置之后,要做业务自定义处理,比如黑白名单刷新之后,要刷新缓存之类,还可以通过Nacos的监听器来实现 

你可以通过配置spring.cloud.nacos.config.refresh.enabled=false来关闭动态刷新

支持自定义 namespace 的配置

首先看一下 Nacos 的 Namespace 的概念, Nacos 概念

用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。

在没有明确指定 ${spring.cloud.nacos.config.namespace} 配置的情况下, 默认使用的是 Nacos 上 Public 这个namespae。如果需要使用自定义的命名空间,可以通过以下配置来实现:

spring.cloud.nacos.config.namespace=b3404bc0-d7dc-4855-b519-570ed34b62d7

所以现在建一个 namespace,比如dev,

并且建立对应的配置文件,同上

  bootstrap.properties 文件中配置

spring.cloud.nacos.config.namespace=f9018f1d-daf7-4a8f-aa1c-927f60992cb7

 重启应用,看下日志打印即可

该配置必须放在 bootstrap.properties 文件中。此外 spring.cloud.nacos.config.namespace 的值是 namespace 对应的 id,id 值可以在 Nacos 的控制台获取。并且在添加配置时注意不要选择其他的 namespae,否则将会导致读取不到正确的配置。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值