天天看点

五分钟实现:Spring-Cloud-Alibaba(二)Nacos-配置中心Spring-Cloud-Alibaba-Nacos-配置中心

Spring-Cloud-Alibaba-Nacos-配置中心

我们需要先对Nacos配置中心有一个全局的概念:

  • 我们在Nacos服务端配置可能需要改变的信息。
  • 我们的应用程序从Nacos服务端拉取配置信息。
  • 当我们在Nacos服务端修改配置信息的时候,我们的应用会监听到数据的修改,近实时的更新配置信息。

一、Nacos控制台配置中心

不知道如何启动Nacos的小伙伴,请参考我的前一篇博客五分钟实现:Spring-Cloud-Alibaba-Nacos-服务治理。

我们可以看下下图,如何配置数据:

五分钟实现:Spring-Cloud-Alibaba(二)Nacos-配置中心Spring-Cloud-Alibaba-Nacos-配置中心

接下来,我们解释下上图中的你需要填写的信息:

  • Data ID:就是你的配置文件的名字,注意要把你的文件的后缀名字也加上。
  • Group:分组的名字,使用Group可以让我们在不同的组中使用相同的配置文件名字。
  • 配置格式,我们指定下,我一般喜欢使用YAML的格式。
  • 配置内容:按照配置格式,写上配置的内容。

下图是我们的一个配置demo:

五分钟实现:Spring-Cloud-Alibaba(二)Nacos-配置中心Spring-Cloud-Alibaba-Nacos-配置中心

二、应用程序拉取配置数据

添加依赖包

<!-- 配置中心 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
           

添加配置

一定要注意,我们添加的配置,需要在一个名叫

bootstrap.yml

的文件中添加。

spring:
  cloud:
    nacos:
      # Nacos配置中心的配置
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yaml
           

那么问题来了,你一定会问,这么配置读取的是哪个配置文件呢?

默认读取的是我们的应用名字对应的文件,比如说我们的应用名字为

service-provider

,读取什么格式的是由上面的file-extension参数来决定的,所以我这么配置真正读取就是service-provider.yaml的Data ID的配置文件。

读取配置

使用以下代码,会自动将从配置中心的拉取的配置信息赋值给变量。

@RestController
@RefreshScope
public class ConfigController {

    @Value("${user.name}")
    private String name;

    @Value("${user.age}")
    private String age;

    @Value("${user.edu}")
    private String edu;

    @RequestMapping("/name")
    public String getName() {
        return name;
    }

    @RequestMapping("/age")
    public String getAge() {
        return age;
    }

    @RequestMapping("/edu")
    public String getEdu() {
        return edu;
    }
}
           

三、数据更新

我们可以尝试更改配置中心中对应的配置信息,你会发现,你的本地的数据也会随之改变。

这得益于我们的注解

@RefreshScope

,把他去掉,应用就不会得到配置中心修改的数据了。

四、多环境配置

我们都有一个共同的疑问,我们的应用都是有多套环境的,开发,测试,预生产,生产等。

如果配置中心也都是多套,当然就不用考虑了。

但是如果配置中心是一个,如何区分不同的配置文件呢,其实和我们本地的配置是一样的。

配置中心,也可以配置多套的配置文件,我们可以配置:

  • service-provider.yaml
  • service-provider-test.yaml
  • service-provider-prod.yaml

应用会根据我们在配置文件

bootstrap.yml

中配置的环境,来读取对应的内容。

spring:
  # 读取哪个环境的配置,以此配置为准,它会覆盖application.yml中的配置
  profiles:
    active: dev
           

同时在配置中心也是具体的配置文件的优先级高于默认的配置文件的。

五、共享配置

我们在实际的应用中可能除了需要根据环境来区别配置,还需要共享一些配置,那我们在

bootstrap.yml

的配置文件中有一个字段

shared-dataids

来定义,我们需要共享的特定的配置文件。

spring:
  cloud:
    nacos:
      # Nacos配置中心的配置
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yaml
        shared-dataids: app-common.yaml
           

六、总结

至此,配置文件的使用写的差不多了,后续问题留待解决:

  • 默认Nacos的数据是写在嵌入式数据库中了,我们可以让其使用Mysql来存储数据。
  • 本文使用的Nacos服务端是用的单例的模式,可以继续探索使用集群的方式来达到高可用。

本文连载文章如下:

五分钟实现:Spring-Cloud-Alibaba-Nacos-服务治理

五分钟实现:Spring-Cloud-Alibaba-Nacos-配置中心

五分钟实现:Spring-Cloud-Alibaba-Sentinel-降级限流

五分钟实现:Spring-Cloud-Alibaba-Sentinel-限流持久化

继续阅读