Nacos发布配置后定时任务中断问题记录

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
问题描述:定时任务获取配置中心数据,进行循环执行业务逻辑,配置中心重新发布后,导致定时任务中断问题。

查阅相关资料发现原因:

  1. 首先Scheduled执行原理,是利用后置处理器ScheduledAnnotationBeanPostProcessor,获取带有@Scheduled注解的方法,进行执行的。
  2. 类上有一个@RefreshScope注解,这个注解下面是@Scope(“refresh”)注解,跟踪源码得知注册bean的时候解析@Scope注解有三个判断逻辑,singleton,prototype,其他(refresh),refresh走的是其他,它把当前对象放进了一个缓存里,Nacos发布配置文件的时候会清空这个缓存,导致当前对象不存在,导致定时任务中断。

总结:当前缓存中对象被删除,导致ScheduledAnnotationBeanPostProcessor后置处理器读取不到类上的@Scheduled注解的方法,导致无法执行。

解决思路:既然发布的时候,清空缓存导致对象不存在,就在清空后生成一个新的对象!

在这里插入图片描述
发布完后,会执行RefreshScopeRefreshedEvent事件,当前对象不存在,创建一个新的对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dmlg清风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值