前言:大家好,我是小威,24届毕业生,曾经在某央企公司实习,目前已入职某税务公司。本篇文章将分享nacos配置管理和热更新的知识点。
本篇文章记录的基础知识,适合在学Java的小白,也适合复习中,面试中的大佬🤩🤩。
如果文章有什么需要改进的地方还请大佬不吝赐教👏👏。
小威在此先感谢各位大佬啦~~🤞🤞
在这里插入图片描述

🏠个人主页:小威要向诸佬学习呀
🧑个人简介:大家好,我是小威,一个想要与大家共同进步的男人😉😉
目前状况🎉:24届毕业生,曾经在某央企公司实习,目前在某税务公司实习👏👏

💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,我亲爱的大佬😘

在这里插入图片描述

以下正文开始

我们都知道,nacos经常用来作为服务的注册中心使用,致力于微服务的发现和管理。但同时,nacos也可以配置与整合服务,接下来将一步步操作nacos的统一配置管理。

首先登录nacos,找到配置管理中的配置列表,点击+号,新建配置,配置文件的id经常由服务名称,profile和后缀名组成,由于我们的服务是用户服务,因此我们取名为userservice,profile环境为dev开发环境,后缀名为yaml,因此id为userservice-profile.yaml。配置内容为:

pattern:
  dateformat: yyyy年MM月dd日 HH:mm:ss

如下所示新建成功:
在这里插入图片描述

项目启动后,在没有进行nacos配置管理之前,会首先读取本地的配置文件application.yml,加上了nacos中的配置文件,会将nacos中的配置文件和application.yml中的文件进行整合。但是我们需要知道,在何处加载nacos配置文件,因此在项目启动之后,我们首先需要获取nacos的地址。

application.yml文件的读取在nacos文件之后,由于bootstrap.yml文件的优先级比较高,因此,我们可以将nacos地址,文件相关信息等放入到bootstrap.yml中。

在resources下新建bootstrap.yaml(引导文件,优先级比application.yaml高),写入nacos的相关配置信息(名成,环境,后缀名都需要和上面建立的nacos配置一样)这些信息决定了程序启动时去nacos中读取哪个文件:
在这里插入图片描述

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

在这里插入图片描述

同时,在userservice的pom文件中引入nacos的配置管理客户端依赖:

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

下面我们测试在项目中读取nacos的配置内容:

@RequestMapping("/user")
public class UserController {
    @Value("${pattern.dateformat}")//获取nacos配置文件的内容
    private String dateformat;
    @GetMapping("/now")
    public String now(){
        return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat)); //与当前时间对应
    }

}

之后启动SpringBoot的几个端口
在这里插入图片描述
按照正确的路径访问即可看到浏览器上显示的当前时间。
在这里插入图片描述
在这里插入图片描述

当我们修改nacos中的配置内容时,需要重启我们的微服务项目,那么如何实现热更新呢(不用重启微服务项目,刷新访问浏览器即可)。

我们只需要在@value注入的变量所在的类上添加@RefreshScope即可,代码:

@RequestMapping("/user")
@RefreshScope
public class UserController {
    @Value("${pattern.dateformat}")//获取nacos配置文件的内容
    private String dateformat;
    @GetMapping("/now")
    public String now(){
        return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat)); //与当前时间对应
    }

}

同时,我们还有另一种方法,不使用@value注解的方式,新建一个配置类:

package cn.itcast.user.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;

@Data
@Component
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {
    private String dateformat;
}

自动装配注入PatternProperties 类调用get方法即可。

public class UserController {


//    @Value("${pattern.dateformat}")
//    private String dateformat;
    @Autowired
    private PatternProperties patternProperties;

    @GetMapping("/now")
    public String now(){
        return LocalDateTime.now().format(DateTimeFormatter.ofPattern(patternProperties.getDateformat()));
    }
}

对于nacos的多服务共享配置,多种配置的优先级为:服务名-profile.yaml >
服务名称.yaml > 本地配置(application.yaml)。

本篇文章就先分享到这里了,后续会继续分享其他的知识,感谢大佬认真读完支持咯~
在这里插入图片描述

文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起讨论🍻
希望能和诸佬们一起努力,今后进入到心仪的公司
再次感谢各位小伙伴儿们的支持🤞

在这里插入图片描述

Logo

欢迎加入西安开发者社区!我们致力于为西安地区的开发者提供学习、合作和成长的机会。参与我们的活动,与专家分享最新技术趋势,解决挑战,探索创新。加入我们,共同打造技术社区!

更多推荐