SpringCloud学习五(Nacos配置管理)
1、统一配置管理
1.1、进入nacos的注册中心添加配置信息:
添加具体的配置后点击发布
发布成功后返回
配置列表
就会显示到我们的配置消息不要将
.yml
的配置都挪过来,只有需要热更新需求的才写到配置里面
1.2、配置获取的步骤如下:
目前又引入了一个新的配置优先级文件
bootstrap.yml
主要是用来存放与nacos有关的信息,优先级高会先读取
-
首先,在user-service服务中,引入nacos-config的客户端依赖:
<!--nacos配置管理依赖--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>
-
然后,在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 Id
userserver-dev.yaml同时要将原来的
application.yml
配置文件重复的去掉,集群信息也注释掉 -
测试是否读取到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中的配置文件变更后,为服务无需重启就可以感知,不过需要如下的两种配置进行实现
-
方式一:在@Value注入的变量所在类上添加注解
@RefreshScope
测试方式,第一次访问获得原来的格式,编辑配置列表对配置属性进行修改,不需要重启服务器再次刷新访问的数据,查看是否改为了刚编辑的配置格式
-
方式二:使用
@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
不包含环境,因此可以被多个环境共享。
-
创建一个共享的配置
查看配置列表
都有相同的前缀和后缀,那么他就是被多个环境所共享的
配置共享的优先级
当nacos、服务本地同时出现相同属性时,优先级有高低之分: