Spring Cloud Alibaba 微服务组件 Nacos 配置中心(六)

目录

默认配置中心

概述

Nacos 配置文件

构建SpringCloudAlibaba Nacos配置中心项目

pom.xml 依赖

启动类

测试类

分组配置中心

概述

Nacos 添加配置文件

配置文件

控制台输出

测试结果

总结

命名空间配置中心

概述

配置文件

测试结果

总结

多文件加载与共享配置

概述

配置中心添加两个配置文件

配置文件

控制台输出

测试结果


  Spring Cloud Aibaba 学习目录

1. Spring Cloud Alibaba 微服务介绍(一)

2. Spring Cloud Alibaba 之Nacos 安装(二)

3. Spring Cloud Alibaba 微服务组件 Nacos 注册中心(三)

4. Spring Cloud Alibaba 微服务负载均衡 Ribbon(四)

5. Spring Cloud Alibaba 微服务整合 OpenFeign(五)

6. Spring Cloud Alibaba 微服务组件 Nacos 配置中心(六)

7. Spring Cloud Alibaba 微服务组件 Sentinel 服务保护(七)

8. Spring Cloud Alibaba 分布式事务概念(八)

9. Spring Cloud Alibaba 微服务组件 Seata 分布式事务(九)

10. Spring Cloud Alibaba 服务网关 Gateway(十)

11. Spring Cloud Alibaba 微服务组件 Skywalking 分布式任务链(十一)

语雀文档:Spring Cloud Aibaba 学习 · 语雀


默认配置中心

概述

下面我们通过一个简单的例子来介绍如何使用 Nacos 来创建配置内容以及如何在 Spring Cloud 应用中加载 Nacos 的配置信息。

Nacos 配置文件

第一步:进入Nacos的控制页面,在配置列表功能页面中,单击右上角的+按钮,进入新建配置页面,如图填写配置信息:

详解说明

  • Data ID:填入nacos-order.ymal
  • Group:默认值 DEFAULT_GROUP
  • 配置格式:选择ymal
  • 配置内容:应用要加载的配置内容,这里仅作为示例,做简单配置,比如:order.title=nacos-order配置中心

构建SpringCloudAlibaba Nacos配置中心项目

第一步:创建一个Spring Cloud应用,可以命名为:order-config。

第二步:编辑 pom.xml,加入必要的依赖配置

项目搭建采用的版本是

  • spring-boot 版本是 2.3.6.RELEASE
  • spring-cloud 版本是 Hoxton.SR8
  • spring-cloud-alibaba 版本是 2.2.5.RELEASE

注意:

  1. 本项目采用 parent 模块化构建项目
  2. 如果你开发工具没有 lombok 插件,可以把 pom 中 lombok 依赖删除掉

pom.xml 依赖

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.6.RELEASE</version>
    </parent>

    <properties>
        <java.version>1.8</java.version>
        <spring.cloud.alibaba.version>2.2.5.RELEASE</spring.cloud.alibaba.version>
        <spring.boot.version>2.3.6.RELEASE</spring.boot.version>
        <spring.cloud.version>Hoxton.SR8</spring.cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.14</version>
            <scope>provided</scope>
        </dependency>
        <!--alibaba-nacos-discovery(阿里注册中心discovery)-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--alibaba-config-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <!--Spring Cloud 相关依赖-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring.cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--Spring Cloud Alibaba 相关依赖-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring.cloud.alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

配置文件

说明:配置文件加载顺序,SpringBoot中会先加载 bootstrap.yml,后加载 application.yml

注意如果是yml配置文件,必须是 bootstrap.yml 而不是 application.yml

详解说明:

客户端配置:在bootstrap.yml文件中 spring.cloud.nacos.config.file-extension 属性声明从配置中心中读取的配置文件格式

该配置的默认是为properties,即默认是读取properties格式的配置文件。当客户端没有配置该属性,并且在nacos server添加的是yml格式的配置文件,则给客户端会读取不到配置文件,导致启动失败。

server:
  ## 启动端口
  port: 8130

spring:
  application:
    ## 注册服务名
    name: nacos-order
  cloud:
    nacos:
      ## 注册中心地址
      discovery:
        server-addr: 127.0.0.1:8848
      ## 配置中心地址
      config:
        server-addr: 127.0.0.1:8848
        ## 指定读取配置文件的后缀
        file-extension: yaml
        ## 分组
        group: DEFAULT_GROUP

启动类

@SpringBootApplication
@EnableDiscoveryClient
public class OrderConfigApp {

    public static void main(String[] args) {
        SpringApplication.run(OrderConfigApp.class,args);
    }
}

测试类

其中通过 @Value 注解,注入了key为order.title的配置(默认为空字符串),这个配置会通过 /getOrder 接口返回,后续我们会通过这个接口来验证Nacos中配置的加载。另外,这里还有一个比较重要的注解@RefreshScope,主要用来让这个类下的配置内容支持动态刷新,也就是当我们的应用启动之后,修改了Nacos中的配置内容之后,这里也会马上生效。

/**
 * @author: LiPing.Zou
 * @create: 2020-05-18 15:27
 **/
@RestController
@RefreshScope
public class OrderController {

    @Value("${order.title}")
    private String orderTitle;


    @GetMapping("getOrder")
    public String getOrder(){
        return "order config" +orderTitle;
    }
}

控制台输出日志

浏览器访问,测试成功!

当我们修改配置中心内容,会触发 RefreshEventListener 事件


分组配置中心

概述

默认分组为 DEFAULT_GROUP,GROUP 可以将不同的微服务进行分组划分。

Nacos 添加配置文件

配置文件

server:
  ## 启动端口
  port: 8160

spring:
  application:
    ## 注册服务名
    name: group-order-config
  cloud:
    nacos:
      ## 注册中心地址
      discovery:
        server-addr: 47.103.20.21:8848
      ## 配置中心地址
      config:
        server-addr: 47.103.20.21:8848
        ## 指定读取配置文件的后缀
        file-extension: yaml
        ## 分组
        group: DEV_GROUP

控制台输出

CompositePropertySource {name='NACOS', propertySources=[NacosPropertySource {name='namespace-order-config-dev.yaml'}, NacosPropertySource {name='namespace-order-config.yaml'}]}

测试结果

总结

  • 优点:通过Group按环境讲各个应用的配置隔离开。可以非常方便的利用Data ID和Group的搜索功能,分别从应用纬度和环境纬度来查看配置。
  • 缺点:由于会占用Group纬度,所以需要对Group的使用做好规划,毕竟与业务上的一些配置分组起冲突等问题。
  • 建议:这种方式虽然结构上比上一种更好一些,但是依然可能会有一些混乱,主要是在Group的管理上要做好规划和控制。

命名空间配置中心

概述

默认为 public,其作用可以用来实现环境隔离作用,比如我们的开发环境、测试环境、生产环境。Nacos 添加命名空间

配置文件

添加了 namespace: 9e7bf496-2518-415c-9dcf-d2d47453457e

server:
  ## 启动端口
  port: 8180

spring:
  application:
    ## 注册服务名
    name: namespace-order-config
  cloud:
    nacos:
      ## 注册中心地址
      discovery:
        server-addr: 127.0.0.1:8848
      ## 配置中心地址
      config:
        server-addr: 127.0.0.1:8848
        ## 指定读取配置文件的后缀
        file-extension: yaml
        ## 命名空间
        namespace: 9e7bf496-2518-415c-9dcf-d2d47453457e

在新建 mall-test 命名空间新增配置

控制台输出

CompositePropertySource {name='NACOS', propertySources=[NacosPropertySource {name='namespace-order-config-dev.yaml'}, NacosPropertySource {name='namespace-order-config.yaml'}]}

测试结果

总结

  • 优点官方建议的方式,通过Namespace来区分不同的环境,释放了Group的自由度,这样可以让Group的使用专注于做业务层面的分组管理。同时,Nacos控制页面上对于Namespace也做了分组展示,不需要搜索,就可以隔离开不同的环境配置,非常易用。
  • 缺点没有啥缺点,可能就是多引入一个概念,需要用户去理解吧。
  • 建议直接用这种方式长远上来说会比较省心。虽然可能对小团队而言,项目不多,第一第二方式也够了,但是万一后面做大了呢?

多文件加载与共享配置

概述

有时候我们会对应用的配置根据具体作用做一些拆分,存储在不同的配置文件中,除了归类不同的配置之外,也可以便于共享配置给不同的应用。对于这样的需求,Nacos也可以很好的支持,下面就来具体介绍一下,当使用Nacos时,我们如何加载多个配置,以及如何共享配置。

配置中心添加两个配置文件

配置文件

group-share-config 服务同时加载两个配置文件 group-share-config.yaml, group-share-config2.yaml

server:
  ## 启动端口
  port: 8160

spring:
  application:
    ## 注册服务名
    name: group-share-config
  cloud:
    nacos:
      ## 注册中心地址
      discovery:
        server-addr: 127.0.0.1:8848
      ## 配置中心地址
      config:
        server-addr: 127.0.0.1:8848
#        ## 指定读取配置文件的后缀
#        file-extension: yaml
#        refreshable-dataids: group-share-config.yaml,group-share-config2.yaml
#        shared-dataids: group-share-config.yaml,group-share-config2.yaml

        ext-config:
          - data-id: group-share-config.yaml
            group: DEFAULT_GROUP
            refresh: true
            fileExtension: yaml
          - data-id: group-share-config2.yaml
            group: DEFAULT_GROUP
            refresh: true
            fileExtension: yaml

控制台输出

测试结果


 项目地址https://gitee.com/gaibianzlp/springcould-alibaba-example.githttps://gitee.com/gaibianzlp/springcould-alibaba-example.giticon-default.png?t=LA92https://gitee.com/gaibianzlp/springcould-alibaba-example.git点关注不迷路,觉得对你有帮助请给一个赞或者长按一键三连,谢谢!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值