Nacos-Config

发布时间 2023-05-29 11:21:44作者: 我不想学编丿程

Nacos 配置文件中心

使用 Spring Cloud Alibaba Nacos Config,可基于 Spring Cloud 的编程模型快速接

入 Nacos 配置管理功能

2.1 创建项目选择依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

2.2 NacosServer 里面添加一个配置文件

image-20230307204254065

2.3 查看上一讲中创建的数据库中的信息

image-20230307204322371

2.4 config-client-a 项目中添加一个配置文件 bootstrap.yml

image-20230307204337471

yserver:
  port: 8081
spring:
  application:
    name: nacos-config-a
  # 项目在启动的时候去哪里找它对应的配置文件呢??
  cloud:
    nacos:
      config:
        server-addr: localhost:8848
        username: nacos
        password: nacos
        prefix: nacos-config-a  # 读哪个配置文件 默认用的是应用名称  是可以修改的
        file-extension: yml  # 文件类型
#        namespace: 默认
#        group:  默认
#  profiles:
#    active: dev

2.5 config-client-a 中添加一个实体类 Hero

package com.example.nacosconfiga.config;



@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
@RefreshScope  // 给这个类上 添加一个刷新的作用域
public class Hero {

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

    @Value("${hero.age}")
    private Integer age;

    @Value("${hero.address}")
    private String address;

}

2.6 config-client-a 中添加一个测试类 Controller

package com.example.nacosconfiga.controller;


import com.example.nacosconfiga.config.Hero;
import org.springframework.beans.factory.annotation.Autowired;
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;

@RestController
public class TestController {

    @Autowired
    public Hero hero;

    @GetMapping("info")
    public String heroInfo() {
        return hero.getName() + ":" + hero.getAge() + ":" + hero.getAddress();
    }

}

image-20230307204513056

2.8 测试配置文件的动态刷新

修改配置文件,不需要重启,直接请求 http://localhost:8080/heroInfo 查看结果已经刷新了

3.配置文件的读取方式【重点

nacos 配置中心通过 namespace、dataId 和 group 来唯一确定一条配置。

  • Namespace:即命名空间。默认的命名空间为 public,我们可以在 Nacos 控制台中新建

命名空间;

  • dataId:即配置文件名称

  • Group : 即 配 置 分 组 , 默 认 为 DEFAULT_GROUP , 可 以 通 过

spring.cloud.nacos.config.group 配置。

其中:dataId 是最关键的配置字段:格式如下

${prefix} - ${spring.profiles.active} . $

  • prefix 默 认 为 spring.application.name 的 值 , 也 可 以 通 过 配 置 项

spring.cloud.nacos.config.prefix 来配置;

  • spring.profiles.active 即 为 当 前 环 境 对 应 的 profile 。 注 意 , 当

spring.profiles.active 为空时,对应的连接符-也将不存在,dataId 的拼接格式变

\({prefix}.\){file-extension};

  • file-extension 为 配 置 内 容 的 数 据 格 式 , 可 以 通 过 配 置 项

spring.cloud.nacos.config.file-extension 来配置。

这就是上面我们为什么能获得到配置的原因了。

注意:在写 dataId 的时候一定要添加文件类型后缀

Eg: nacos-config-dev.yml

如果prefix和配置中心的名字一样,不管加不加active都不会拼接,如果是拼接了active才和配置中心的一样就要加后缀

5.获取多配置文件

除了通过上面的方式指定一个唯一配置外,我们还可以同时获取多个配置文件的内容。

提供这个功能 可以再次封装和抽象配置文件管理

5.1 Nacos 中新建两个配置文件

在 powernode 命名空间,继续点击添加两个配置文件

image-20230307214304867

**5.2 **修改 config-client-a 项目的配置文件

server:
    port: 8082
spring:
    application:
        name: nacos-config-test
    cloud:
        nacos:
            config:
                server-addr: localhost:8848
                username: nacos
                password: nacos
                namespace: c52e715f-3f00-4ad8-803b-9c8dba19a221 # 目前读取多配置文件的方式只支持在同一个命名空间下
                file-extension: yml
                extension-configs: # 可以读多个配置文件 需要在同一个命名空间下面 可以是不同的组
                    -   dataId: user-center-dev.yml
                        group: A_GROUP
                        refresh: true
                    -   dataId: member-center-dev.yml
                        group: B_GROUP
                        refresh: false  # 不去动态刷新配置文件
    profiles:
        active: dev

说明:

  • spring.cloud.nacos.config.extension-configs[n].dataId , 指 定 多 个 配 置 的

dataId,必须包含文件格式,支持 properties、yaml 或 yml;

  • spring.cloud.nacos.config.extension-configs[n].group,指定分组;

  • spring.cloud.nacos.config.extension-configs[n].refresh,是否支持刷新。

上面的配置中,我们分别从 DEFAULT_GROUP 中获取了 config-a.yml 和 config-b.yml 配置

内容,并且 config-a.yml 支持刷新,config-b.yml 不支持刷新。

注意:

没有 namespace 的配置,言外之意就是 Nacos 目前还不支持多个配置指定不同的命名空间。

5.3 共享配置文件

server:
    port: 8082
spring:
    application:
        name: nacos-config-test
    cloud:
        nacos:
            config:
                server-addr: localhost:8848
                username: nacos
                password: nacos
                namespace: c52e715f-3f00-4ad8-803b-9c8dba19a221 # 目前读取多配置文件的方式只支持在同一个命名空间下
                group: A_GROUP
                prefix: user-center
                file-extension: yml
                shared-configs: # 共享配置文件
#                    - application-dev.yml  # 这里可以写共享的文件名称 只能在DEFAULT_GROUP
                    - dataId: application-dev.yml  # 这两种写法都可以
                      group: C_GROUP
                      refresh: true

    profiles:
        active: dev

6.Spring Cloud Alibaba Nacos Config 常用的配置

image-20230307220150721

7.两端的配置文件写什么内容

本地的 bootstrap.yml(应用名称,配置文件中心(注册中心地址),读取的配置文件名称信

息)

远端的配置文件(端口,数据源,redis,mq,mybatis,Swagger...)