• Nacos配置文件更新+热更新+多环境配置共享+集群搭建


    对服务配置文件

    场景:

    如果多个服务对应的配置文件都需要更改时,可以利用配置管理,方便对配置文件进行更新,而且是在本地配置前先读取nacos的配置文件,优先级大于本地配置文件

    在这里插入图片描述

    配置步骤

    在这里插入图片描述
    1.首先在Nacos中的配置列表中增加一个配置文件:文件名字:服务名称+环境+yaml

    在这里插入图片描述
    2.然后配置一个bootstrap.yaml,里面是服务的配置信息:(服务名称,Nacos连接地址,环境,extendion拓展的yaml配置)——>注意之前的yaml配置要删除,放在bootstrap.yaml中

    spring:
      application:
        name: userservice # 服务名称
      profiles:
        active: dev # 环境
      cloud:
        nacos:
          server-addr: localhost:8848 #连接nacos地址,根据服务名称进行配置拓展
          config:
            file-extension: yaml # 文件后缀
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    3.然后在控制层可以进行测试

    在这里插入图片描述

    总结:

    在这里插入图片描述

    实现热更新

    前言:为什么要使用热更新?

    答:热更新可以在不用重启服务的情况下,对服务的配置进行更改,方便客户

    步骤

    方法1.使用注解@RefreshScope注解实现热更新

    方法2.自动实现刷新利用@ConfigurationProperties:通过配置一个Properties类注入容器中,里面配置dateformat,然后注入controller中;

    对比:@RefreshScope会让代码太冗余了,如果我多个控制器都要用到扩展的配置文件中的属性,岂不是每个属性都得@Value赋值+@RefreshScope;

    而@ConfigurationProperties+@Component将扩展属性全部放到容器中,我们的控制器直接注入这个组件就行了,然后get值,这样代码冗余减少了很多;

    package cn.itcast.user.config;
     
    import lombok.Data;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.stereotype.Component;
     
    /**
     * @author diao 2022/5/7
     */
    @Component
    @Data
    @ConfigurationProperties(prefix = "pattern")
    public class PatternProperties {
        private String dateformat;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    package cn.itcast.user.web;
     
    import cn.itcast.user.config.PatternProperties;
    import cn.itcast.user.pojo.User;
    import cn.itcast.user.service.UserService;
    import lombok.extern.slf4j.Slf4j;
    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.*;
     
    import java.time.LocalDate;
    import java.time.LocalDateTime;
    import java.time.format.DateTimeFormatter;
    import java.util.Locale;
     
    @Slf4j
    @RestController
    //@RefreshScope //完成热更新
    @RequestMapping("/user")
    public class UserController {
     
        @Autowired
        private UserService userService;
     
        /**
         * 将userservice服务拓展的配置属性(pattern.dateformat)注入
         */
    //    @Value("${pattern.dateformat}")
    //    private String dateformat;
     
        @Autowired
        private PatternProperties patternProperties;
     
        @GetMapping("now")
        public String now(){
            System.out.println(patternProperties.getDateformat());
           return LocalDateTime.now().format(DateTimeFormatter.ofPattern(patternProperties.getDateformat()));
        }
     
        /**
         * 路径: /user/110
         *
         * @param id 用户id
         * @return 用户
         */
        @GetMapping("/{id}")
        public User queryById(@PathVariable("id") Long id) {
            return userService.queryById(id);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51

    在这里插入图片描述

    多环境(测试+开发+生产)配置共享

    在这里插入图片描述

    在这里插入图片描述

    步骤

    1.先配置全局环境配置(支持多环境)
    在这里插入图片描述

    2.分别在具体环境的配置文件和全局环境配置文件中增加属性配置

    当前环境配置:
    在这里插入图片描述

    全局环境配置:
    在这里插入图片描述
    3.在配置类中将这些新属性注入,并在控制器中获取json数据,看谁优先级更高

    @Data
    @Component
    @ConfigurationProperties(prefix = "pattern")
    public class PatternProperties {
        private String dateformat;
    
        private String envSharedValue;
    
        private String name;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
     
    @Slf4j
    @RestController
    @RequestMapping("/user")
    //@RefreshScope
    public class UserController {
    
        @Autowired
        private UserService userService;
    
    //    @Value("${pattern.dateformat}")
    //    private String dateformat;
    
        @Autowired
        private PatternProperties properties;
    
        @GetMapping("now")
        public String now(){
            return LocalDateTime.now().format(DateTimeFormatter.ofPattern(properties.getDateformat()));
        }
    
        /**
         * 路径: /user/110
         *
         * @param id 用户id
         * @return 用户
         */
        @GetMapping("/{id}")
        public User queryById(@PathVariable("id") Long id) {
            return userService.queryById(id);
        }
    
        @GetMapping("prop")
        public PatternProperties properties(){
            return properties;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    可以在服务配置里面修改服务实例的测试环境,就不用每次去修改代码了

    在这里插入图片描述

    结果:

    dev环境:
    在这里插入图片描述

    test环境:
    在这里插入图片描述

    本地配置和远程全局配置和远程环境配置三者都有同一属性时: 优先级 本地< 全局 < 环境

    Nacos集群搭建

    nginx完成Nacos的负载均衡,mysql实现主从复制 (Nacos集群读取共享数据)

    在这里插入图片描述

    步骤

    直接本地复制三个nacos ,开三个端口nacos
    在这里插入图片描述

    1.先创建数据库,根据Nacos配置文件中的内容(包括:连接的数据库+username+password+所连接的数据库个数)
    在这里插入图片描述
    2.不同nacos中的配置端口需要修改,修改成与其他Nacos不一致的

    在这里插入图片描述
    3.在nacos中的cluster.conf配置中修改端口:也就是说当前nacos被启动,端口会是其中一个

    特别注意,第一个地址是0.1:8845 后面的是两个0.1后面加的是点 不是冒号
    在这里插入图片描述

    4.当我们启动多个nacos时,对其在地址栏进行访问,会采用负载均衡的方法,访问Nacos集群中的一个服务器;

    在nginx中进行配置

    此时nginx反向代理已经将端口修改成了80 所以要将idea中的8848端口改成80端口

    在这里插入图片描述

    5.然后访问即可;
    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在nacos中编写配置 则直接储存到本地数据库中
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    麒麟系统安装找不到安装源!!!!设置基础软件仓库时出错
    kubernetes部署和运行维护中的错误汇总(不定时更新)
    Python 中的 Pandas(数据分析与处理)
    企业微信hook接口协议,ipad协议http,发送小程序
    YUM源的几种常见方式
    【利用AI让知识体系化】5种创建型模式
    基因组坐标系统的 0-based 和 1-based(图文详解)
    java - 设计模式 - 状态模式
    6242. 二叉搜索树最近节点查询
    项目开源!基于PaddleDetection打造实时人体姿态检测的多关节控制皮影机器人
  • 原文地址:https://blog.csdn.net/weixin_67201964/article/details/132722536