当前位置: 首页 > news >正文

Spring Cloud Alibaba快速入门02-Nacos(下)

文章目录

  • nacos配置中心
    • 基本使用
    • 动态刷新-1 @Value+@RefreshScope
      • 如果不需要配置中心
    • 动态刷新-2 @ConfigurationProperties
    • 动态刷新-3 NacosConfigManager
    • 面试题:Nacos中的数据集 和 application.properties 有相同的 配置项,哪个生效?


在这里插入图片描述

nacos配置中心

在这里插入图片描述

基本使用

在这里插入图片描述

动态刷新-1 @Value+@RefreshScope

  • 使用步骤
    • @Value(“${xx}”) 获取配置 + @RefreshScope 实现自动刷新
    • @ConfigurationProperties 无感自动刷新
    • NacosConfigManager 监听配置变化

在nacos配置管理创建配置
在这里插入图片描述
其中Data ID为数据集id,写法为名称+后缀名。
这里填写为qf-service-order.properties
配置内容为

order.timeout=30min
order.auto-confirm=7d

在这里插入图片描述
填写完毕后点击发布

order项目加入依赖

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

配置文件

server:port: 8080servlet:context-path: /
spring:application:name: qf-service-order# 配置nacos地址(告诉当前应用nacos在哪里)cloud:nacos:server-addr: 127.0.0.1:8848config:import: nacos:qf-service-order.properties

控制类

import com.qf.entity.Order;
import com.qf.service.OrderService;
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.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;@RefreshScope//自动刷新
@RestController
public class OrderController {@Value("${order.timeout}")String orderTimeout;@Value("${order.auto-confirm}")String orderAutoConfirm;@GetMapping("/config")public String config(){return "order.timeout="+orderTimeout+"; " + "order.auto-confirm="+orderAutoConfirm +";";}
}

访问接口http://127.0.0.1:8080/config

在nacos配置管理中修改值
在这里插入图片描述
此时在刷新接口,发现值发生改变。实现动态刷新

在这里插入图片描述
可以看到nacos加载了我们在配置列表中配置的数据集。
并且在最后可以看到已经在监听该dataId了

如果不需要配置中心

注意:此时因为在父模块中引用了nacos配置中心,所以如果有服务没有在配置文件中配置nacos中spring.config.import,在启动时会发生报错:

***************************
APPLICATION FAILED TO START
***************************Description:No spring.config.import property has been definedAction:Add a spring.config.import=nacos: property to your configuration.If configuration is not required add spring.config.import=optional:nacos: instead.To disable this check, set spring.cloud.nacos.config.import-check.enabled=false.

此时配置spring.cloud.nacos.config.import-check.enabled=false即可关闭配置中心相关配置检查

动态刷新-2 @ConfigurationProperties

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Component
@ConfigurationProperties(prefix = "order") //配置批量绑定在nacos下,可以无需@RefreshScope就能实现自动刷新
@Data
public class OrderProperties {String timeout;String autoConfirm;
}
@Autowired
OrderProperties orderProperties;@GetMapping("/config")
public String config(){return "order.timeout="+orderProperties.getTimeout()+"; " +"order.auto-confirm="+orderProperties.getAutoConfirm() +";";
}

启动项目修改nacos配置管理即可完成动态刷新

动态刷新-3 NacosConfigManager

import com.alibaba.cloud.nacos.NacosConfigManager;
import com.alibaba.nacos.api.config.ConfigService;
import com.alibaba.nacos.api.config.listener.Listener;
import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;import java.util.concurrent.Executor;
import java.util.concurrent.Executors;@SpringBootApplication
public class OrderApplication {public static void main(String[] args) {SpringApplication.run(OrderApplication.class, args);}//1、项目启动就监听配置文件变化//2、发生变化后拿到变化值//3、发送邮件/*** 创建并配置ApplicationRunner bean* 该bean在应用启动后执行,用于监听Nacos配置变化** @param nacosConfigManager Nacos配置管理器,用于获取ConfigService,项目启动时自动拿到容器中的NacosConfigManager* @return ApplicationRunner 实例,用于执行应用启动后的操作*/@BeanApplicationRunner applicationRunner(NacosConfigManager nacosConfigManager){return  args -> {// 获取ConfigService实例,用于操作Nacos配置ConfigService configService = nacosConfigManager.getConfigService();// 为"qf-service-order.properties"配置文件添加监听器//这里监听的文件写任何配置文件都可以,不是只能监听qf-service-order.properties// 当配置发生变化时,触发通知configService.addListener("qf-service-order.properties","DEFAULT_GROUP", new Listener() {// 返回一个固定大小的线程池,用于异步处理配置变化@Overridepublic Executor getExecutor() {return Executors.newFixedThreadPool(4);}// 接收配置信息变化并处理@Overridepublic void receiveConfigInfo(String configInfo) {// 打印变化的配置信息System.out.println("变化的配置信息:"+configInfo);// 模拟配置变化后的操作,如发送邮件通知System.out.println("邮件通知...");}});// 标志应用启动完成,监听器已注册System.out.println("=========");};}
}

启动项目修改nacos配置管理即可完成动态刷新监听

面试题:Nacos中的数据集 和 application.properties 有相同的 配置项,哪个生效?

答案:Nacos中数据集会覆盖application.properties中的配置项
添加相同的属性

server:port: 8080servlet:context-path: /
spring:application:name: qf-service-order# 配置nacos地址(告诉当前应用nacos在哪里)cloud:nacos:server-addr: 127.0.0.1:8848config:import: nacos:qf-service-order.properties
order:timeout: 50auto-confirm: 50

启动项目后可以发现使用的为nacos中配置的值

在spring.config.import中的配置文件中出现相同的属性

server:port: 8080servlet:context-path: /
spring:application:name: qf-service-order# 配置nacos地址(告诉当前应用nacos在哪里)cloud:nacos:server-addr: 127.0.0.1:8848config:# 当多个配置文件中配置属性相同时,配置文件的加载顺序决定了哪个配置会覆盖另一个。通常情况下,后加载的配置会覆盖先加载的配置。# 如这里两者有相同的属性键,common.properties 中的值会覆盖 qf-service-order.properties 中的值。import: nacos:qf-service-order.properties,nacos:common.properties
order:timeout: 50auto-confirm: 50

当多个配置文件中配置属性相同时,配置文件的加载顺序决定了哪个配置会覆盖另一个。通常情况下,后加载的配置会覆盖先加载的配置。
如这里两者有相同的属性键,common.properties 中的值会覆盖 qf-service-order.properties 中的值。
在这里插入图片描述



文章转载自:

http://J6IwOij5.qfzjn.cn
http://je1IGbV2.qfzjn.cn
http://ATE3yV5R.qfzjn.cn
http://r5AgYgMs.qfzjn.cn
http://NtMvNKod.qfzjn.cn
http://iRi5gUJP.qfzjn.cn
http://HOMbdd8n.qfzjn.cn
http://cmuqZMX2.qfzjn.cn
http://lpa8To6F.qfzjn.cn
http://u6heSCsx.qfzjn.cn
http://0NoRcHEh.qfzjn.cn
http://eYCNclmu.qfzjn.cn
http://lSqH3J2m.qfzjn.cn
http://4o9EheHP.qfzjn.cn
http://DzZetn0V.qfzjn.cn
http://GTtFTghQ.qfzjn.cn
http://ElUBC28o.qfzjn.cn
http://tFVPGuKC.qfzjn.cn
http://vv5dppOO.qfzjn.cn
http://WCXDTZnU.qfzjn.cn
http://TwgW5x0E.qfzjn.cn
http://INtxO5MV.qfzjn.cn
http://QerasxCi.qfzjn.cn
http://dildIAPY.qfzjn.cn
http://kbwQbXYV.qfzjn.cn
http://O0lDzS0F.qfzjn.cn
http://TtSAkmdh.qfzjn.cn
http://X5r2Yxpt.qfzjn.cn
http://czjclwKg.qfzjn.cn
http://oFdOl9Dl.qfzjn.cn
http://www.dtcms.com/a/372926.html

相关文章:

  • DA-WSOL
  • FlutterActivity vs FlutterFragmentActivity:全面对比与最佳实践
  • 算法高频题
  • Aider AI Coding 项目 LLM 模型管理 深度分析
  • Spring事件监听机制(三)
  • 设计模式之单例模式大全---java实现
  • Separated collaborative learning
  • Microsoft Visual C++ 运行库安装教程(最新版完整指南 | DLL修复方案)
  • 【Linux】vim工具篇
  • 迁移学习:人工智能的智慧传承与革新之道
  • SQL面试题及详细答案150道(116-135) --- 高级查询与函数篇
  • LRU 缓存
  • Redis的Feed流实现方案
  • 5G专网、物联网专业技术知识
  • LaTeX TeX Live 安装与 CTAN 国内镜像配置(Windows / macOS / Linux 全流程)
  • 脑电数据预处理十六:自动化阈值检测原理与实践
  • 9月8日
  • Java全栈开发工程师的实战面试经历:从基础到微服务
  • 冰火岛 Tech 传:Apple Foundation Models 心法解密(上集)
  • 腾讯云 CLB (Cloud Load Balancer) 为例,详细讲解如何配置 Nginx 集群
  • 25.线程概念和控制(二)
  • VMware-三种网络模式原理
  • 【Java实战㉝】Spring Boot实战:从入门到自动配置的进阶之路
  • 【WRF-VPRM 预处理器第一期】完整安装(服务器)
  • 【Unity笔记】Unity 编辑器扩展:打造一个可切换 Config.assets 的顶部菜单插件
  • Visual Studio Code设置个性化背景教程
  • AI内容标识新规实施后,大厂AI用户协议有何变化?(二)百度系
  • 【大模型应用开发 5.LlamaIndex知识管理与信息检索】
  • 打开SOLIDWORKS非常缓慢的测试排查方法
  • 《Redis Cluster 去中心化实战指南:从集群搭建、故障转移到扩缩容全流程》