SpringCloud 配置中心帮助我们能动态地刷新应用的配置,只需要通过一个注解 @RefreshScope 即可。

一直以为 @RefreshScope 会重新启动应用,直到同事遇到问题,一起调试后才发现,事实并非如此。

验证过程非常简单,手写几个 ApplicationListener 即可。

@Component
public class CustomApplicationStartedListener implements ApplicationListener<ApplicationStartedEvent> {@Overridepublic void onApplicationEvent(ApplicationStartedEvent applicationStartedEvent) {// @RefreshScope 修改配置文件后,并不触发该事件,换句话说没有重启应用ConfigurableApplicationContext applicationContext = applicationStartedEvent.getApplicationContext();System.out.println("首次启动:" + applicationContext);Object tjClient = applicationContext.getBean("tjClient");System.out.println("首次启动:" + tjClient);}
@Component
public class CustomContextRefreshedListener implements ApplicationListener<ContextRefreshedEvent> {@Overridepublic void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {ApplicationContext applicationContext = contextRefreshedEvent.getApplicationContext();Object tjClient = applicationContext.getBean("tjClient");System.out.println(tjClient);}}

应用启动后,刷新Nacos 上的配置文件,上面的两个 Listener 都没有走,只走了下面这个Listener

@Component
public class CustomRefreshScopeRefreshedListener  implements ApplicationContextAware, ApplicationListener<RefreshScopeRefreshedEvent> {private ApplicationContext applicationContext;@Overridepublic void onApplicationEvent(RefreshScopeRefreshedEvent refreshScopeRefreshedEvent) {// @RefreshScope 刷新配置文件后,发出了 refreshScopeRefreshedEvent 事件, 而没有出发 ContextRefreshedEvent// 换句话说 applicationContext 仍然是同一个对象System.out.println("刷新Nacos配置文件后:" + applicationContext);// @RefreshScope 注解的对象,刷新后并没有立刻重新创建,而是在首次使用时,才创建,相当于懒加载Object tjClient = applicationContext.getBean("tjClient");System.out.println("刷新Nacos配置文件后:" + tjClient);}@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {this.applicationContext = applicationContext;}//RefreshScopeRefreshedEvent
}

打印结果也说明了 刷新配置文件时,applicationContext 并没有重建,应用没有重启!!

SpringCloud ——@RefreshScope相关推荐

  1. SpringCloud Alibaba微服务实战(四) - Nacos Config 配置中心

    说在前面 Nacos 是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现.配置管理和服务管理平台.Nacos Config就是一个类似于SpringCloud Config的配置中心. 一.启动N ...

  2. 原 史上最简单的SpringCloud教程 | 第八篇: 消息总线(Spring Cloud Bus)(Finchley版本)

    转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springcloud/2018/08/30/sc-f8-bus/ 本文出自方志朋的博客 转载请标明出处: Spr ...

  3. springboot2新版springcloud微服务,带你了解不一样的springboot2

    sb2.0新版springcloud微服务实战:Eureka+Zuul+Feign/Ribbon+Hystrix Turbine+SpringConfig+sleuth+zipkin springbo ...

  4. 深入理解SpringCloud之配置刷新

    我们知道在SpringCloud中,当配置变更时,我们通过访问http://xxxx/refresh,可以在不启动服务的情况下获取最新的配置,那么它是如何做到的呢,当我们更改数据库配置并刷新后,如何能 ...

  5. springcloud(七):配置中心svn示例和refresh

    上一篇springcloud(六):配置中心git示例留了一个小问题,当重新修改配置文件提交后,客户端获取的仍然是修改前的信息,这个问题我们先放下,待会再讲.国内很多公司都使用的svn来做代码的版本控 ...

  6. 配置SpringCloud Config Client连上Config Server

    SpringCloud Config Client实际上就是连接到Config Server的普通应用,前面一篇文章 SpringCloud Config Server搭建 已经介绍了如何搭建一个Co ...

  7. 白话SpringCloud | 第八章:分布式配置中心的服务化及动态刷新

    前言 上一章节,简单介绍了分布式配置中心Spring Cloud Config的使用.同时,我们也遗漏了一些问题,比如如何配置实时生效,当服务端地址变更或者集群部署时,如何指定服务端地址?回想,在服务 ...

  8. springcloud config 分布式配置中心

    一.介绍 1.场景: 微服务系统中,系统多.实例多,如果每个系统都有自己一套配置加载.维护的机制,会导致在生产过程中因为配置问题引发的不必要的沟通成本.故障风险.需要采用分布式配置中心统一管理.统一实 ...

  9. spring-cloud Finchley.SR2版本 升级微服务到springboot 2.0

    2019独角兽企业重金招聘Python工程师标准>>> 读书笔记 spring-cloud Finchley.SR2版本 升级微服务到springboot 2.0 贴码云 https ...

  10. spring boot pom配置_125 SpringCloud服务配置中心

    1. 为什么需要使用配置中心 (1) 常用的配置管理解决方案有哪些缺点? 硬编码:需要修改代码的话繁琐且风险大: 配置写在properties里面,在集群环境下,需要替换和重启: 写在xml文件中,一 ...

最新文章

  1. RISC-V会被卡吗?那么你觉得C语言会不会被卡? | 包云岗
  2. QT学习-10/18/2012
  3. Bitmap的一个简单实现
  4. SSM(Spring4.x.x+SpringMVC4.x.x+Mybatis3.4.x)框架整合
  5. GDCM:gdcm::PixelFormat的测试程序
  6. jsp使用cookie实现记住用户名和密码
  7. [Intellij] Project Structure 配置说明
  8. 熊族部落---要邀请码
  9. C语言---学生奖学金评定系统设计
  10. java 读取手机sd卡_获取Android手机中SD卡内存信息
  11. win7下笔记本电脑给手机开热点
  12. win2003配置apache支持php_asp,Win2003下配置asp+cgi+php+mysql
  13. 宽带拨号密码查看工具
  14. 2016都市小说排行版前十推荐
  15. forestploter包,超赞的森林图绘制新R包
  16. 通用型系统架构层次图
  17. 【微服务入门】分布式事务详解及seata的使用
  18. 星座运势周公解梦带流量主微信小程序源码下载
  19. 快手上市 CEO写下70万行代码 致敬程序员改变世界
  20. php征婚段子,婚姻婚礼类阿金短视频脚本段子剧本台词范例抖音快手素材

热门文章

  1. python playsound播放时关闭_python - 使用playsound模块停止音频 - 堆栈内存溢出
  2. PolSARpro导入外部极化矩阵数据(以高分三号为例,附格式转化代码)
  3. 苹果手机屏幕镜像怎么连接电视_创维电视怎么连接手机?图解创维电视连接手机步骤...
  4. NC63重写导入功能
  5. Java选择排序(升序和降序)
  6. Java HTTP 代理服务器
  7. 从傅里叶级数到拉普拉斯变换
  8. LoadRunner 快速生成手写脚本
  9. mysql表结构指哪些_gp数据库查看表结构
  10. 2021年3月CISSP考试顺利通过,超详细的经验介绍