前言:大家好,我是小威,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.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
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)。
本篇文章就先分享到这里了,后续会继续分享其他的知识,感谢大佬认真读完支持咯~
文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起讨论
希望能和诸佬们一起努力,今后进入到心仪的公司
再次感谢各位小伙伴儿们的支持