SpringCloud学习五(Nacos配置管理)

SpringCloud学习五(Nacos配置管理)

1、统一配置管理

1.1、进入nacos的注册中心添加配置信息:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Gy0hDCnE-1653790302246)(images/nacos2/1、添加nacos配置.png)]

添加具体的配置后点击发布

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nzUzH8XN-1653790302247)(images/nacos2/2、配置.png)]

发布成功后返回配置列表就会显示到我们的配置消息

不要将.yml的配置都挪过来,只有需要热更新需求的才写到配置里面

1.2、配置获取的步骤如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RaRumKTp-1653790302248)(images/nacos2/3、配置获取流程.png)]

目前又引入了一个新的配置优先级文件bootstrap.yml主要是用来存放与nacos有关的信息,优先级高会先读取

  1. 首先,在user-service服务中,引入nacos-config的客户端依赖:

    <!--nacos配置管理依赖-->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>
    
  2. 然后,在user-service中添加一个bootstrap.yaml文件,内容如下:

    spring:
      application:
        name: userserver # 服务名称
      profiles:
        active: dev # 开发环境
      cloud:
        nacos:
          server-addr: localhost:8848 # nacos地址
          config:
            file-extension: yaml # 文件后缀名
    

    name + active + file-extension:组成了我们配置Data Iduserserver-dev.yaml

    同时要将原来的application.yml配置文件重复的去掉,集群信息也注释掉

  3. 测试是否读取到nacos配置列表中的数据

    /**
     * 读取nacos中的配置
     */
    @Value("${pattern.dateformat}")
    private String dateformat;
    
    /**
     * 根据获取的格式返回数据
     * @return
     */
    @GetMapping("now")
    public String now(){
          
          
        return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));
    }
    

    当访问这个路径的时候,我们就回得到2022-05-29 08:42:11日期格式,就是配置列表中写的

2、配置热更新

Nacos中的配置文件变更后,为服务无需重启就可以感知,不过需要如下的两种配置进行实现

  1. 方式一:在@Value注入的变量所在类上添加注解@RefreshScope

    测试方式,第一次访问获得原来的格式,编辑配置列表对配置属性进行修改,不需要重启服务器再次刷新访问的数据,查看是否改为了刚编辑的配置格式

  2. 方式二:使用@ConfigurationProperties注解==【推荐】==

    创建一个对象属性实体类,获取配置属性对象,通过@ConfigurationProperties(prefix = "pattern")指定了前缀,那么属性只要对应配置的对象就可以获取到数据

    package cn.itcast.user.config;
    
    import lombok.Data;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.stereotype.Component;
    
    /**
     * 项目名称:cloud-demo
     * 描述:获取配置属性的配
     *
     * @author zhong
     * @date 2022-05-29 9:18
     */
    @Data
    @Component
    @ConfigurationProperties(prefix = "pattern")
    public class PatternProperties {
          
          
        private String dateformat;
    }
    
    

    测试

    /**
     * 注入获取属性
     */
    @Autowired
    PatternProperties patternProperties;
    
    /**
     * 根据获取的格式返回数据
     * @return
     */
    @GetMapping("now")
    public String now(){
          
          
        return LocalDateTime.now().format(DateTimeFormatter.ofPattern(patternProperties.getDateformat()));
    }
    

3、配置共享

其实微服务启动时,会去nacos读取多个配置文件,例如:

  • [spring.application.name]-[spring.profiles.active].yaml,例如:userservice-dev.yaml

  • [spring.application.name].yaml,例如:userservice.yaml

[spring.application.name].yaml不包含环境,因此可以被多个环境共享。

  1. 创建一个共享的配置

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BuL7xXMy-1653790302249)(images/nacos2/4、共享配置.png)]

    查看配置列表

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SWCMVgQR-1653790302250)(images/nacos2/5、配置列表.png)]

    都有相同的前缀和后缀,那么他就是被多个环境所共享的

配置共享的优先级

当nacos、服务本地同时出现相同属性时,优先级有高低之分:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lkgUA3QQ-1653790302251)(images/nacos2/image-20220529093637472.png)]

猜你喜欢

转载自blog.csdn.net/baidu_39378193/article/details/125027671