解决Nacos配置刷新导致定时器停止执行的问题

2023-09-22 08:59:26

1. 问题描述

我使用了一个定时器类来执行某个任务,并且使用Nacos作为配置中心来管理定时器的配置。我发现当Nacos配置发生变化时,定时器实例会停止执行任务,导致任务无法按预期执行。

2. 原先的实现方式

以下是我原先的代码实现方式:

@Component
@RefreshScope
@RequiredArgsConstructor
public class LikedTimesCheckTask {

    @Value("${tj.liked.times.check.biz-type}")
    private List<String> bizType;

    @Value("${tj.liked.times.check.max-biz-size}")
    private int maxBizSize;

    private final ILikedRecordService recordService;

    @Scheduled(fixedDelay = 2000)
    public void checkLikedTimes(){
        System.out.println(bizType);
        System.out.println(maxBizSize);
    }
}

3. 解决方案

解决这个问题,采取了以下方案:

  1. 创建一个独立的配置类:我创建了一个名为LikedCheckConfig的独立配置类,用于管理定时器相关的配置属性。
@Getter
@Setter
@RefreshScope
@Configuration
public class LikedCheckConfig {
    @Value("${tj.liked.times.check.biz-type}")
    private List<String> bizType;

    @Value("${tj.liked.times.check.max-biz-size}")
    private int maxBizSize;
}
  1. 在定时器类中使用配置类:

    将配置类注入到定时器类中,并通过构造函数注入。

@Component
@RequiredArgsConstructor
public class LikedTimesCheckTask {

    private final LikedCheckConfig likedCheckConfig;

    @Scheduled(fixedDelay = 2000)
    public void checkLikedTimes(){
        System.out.println(likedCheckConfig.getBizType());
        System.out.println(likedCheckConfig.getMaxBizSize());
    }
}

4. 总结

在使用Nacos作为配置中心并且同时使用Spring的定时器时,配置刷新可能会导致定时器停止执行任务的问题。为了解决这个问题,我采取了以下步骤:

  1. 创建一个独立的配置类:我创建了一个名为LikedCheckConfig的独立配置类,用于管理定时器相关的配置属性。该配置类使用了@RefreshScope注解,表示在配置刷新时会更新配置属性的值。

  2. 在定时器类中使用配置类:我们将配置类注入到定时器类中,并通过构造函数注入。这样,定时器类就可以使用配置类中的属性来执行任务。

通过以上步骤,我们成功解决了Nacos配置刷新导致定时器停止执行的问题。现在,当配置发生变化时,定时器仍然可以按时执行任务,并且可以获取到最新的配置值。

这种解决方案的关键在于使用独立的配置类,并将配置类注入到定时器类中。这样做的好处是,配置类的属性值会在配置刷新时自动更新,而定时器类不会受到配置刷新的影响,可以继续正常执行任务。

更多推荐

控制台日志打印console的封装,加入美化、行显示与打印开关,支持node.js环境

控制台日志打印console的封装,加入美化、行显示与打印开关,支持node.js环境为什么要写这个?封装这个控制台日志打印工具,主要是在项目中自己做的SDK需要提供给其他开发人员使用,加入了日志美化和打印打开,方便了开发人员查找SDK中的日志(提高了逼格),也加深了自己对日志关键性的理解。首先讲下封装时遇到的一些问题

【力扣】27. 移除元素

题目描述给你一个数组nums和一个值val,你需要原地移除所有数值等于val的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用O(1)额外空间并原地修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以「引用」

ddos打到高防cdn上会发生什么

ddos打到cdn上会发生什么?当DDoS攻击打到CDN上时,肯定会影响网站的可用性和用户体验。具体DDoS攻击打到CDN上时,会发生以下情况:CDN节点负载增加:DDoS攻击会导致大量的无效流量涌入CDN节点,从而使得节点负载增加。这可能会导致节点响应变慢,甚至出现崩溃、停止响应等情况。影响用户访问:如果DDoS攻击

ArcGIS Engine:C#基础语法的了解

目录01前言02实验2.1创建“HelloWorld”程序2.2创建程序,完成成绩评定功能2.3创建程序,完成1到100的累加2.4窗体应用程序01前言学了一些语言了,确实发现,语言只是工具,只有你作为初恋的语言值得你花大量时间去深究。而对于其他作为应用或者说只是作为桥梁的语言去学习其他内容的课程,没有必要过分深究语言

Spring Task

Spring框架提供了一套任务调度的功能,可以帮助开发者实现定时任务和异步任务的管理和调度。任务调度是指按照预定的时间表执行某个任务或一系列任务,Spring的任务调度模块可以在应用程序中方便地配置和管理这些任务。Spring框架中任务调度的核心是通过TaskScheduler接口和@Scheduled注解来定义和执行

OpenHarmony ArkTS工程目录结构(Stage模型)

一、应用工程结构图片来源:OpenHarmony官网AppScope>app.json5:应用的全局配置信息。entry:OpenHarmony工程模块,编译构建生成一个HAP包。src>main>ets:用于存放ArkTS源码。src>main>ets>entryability:应用/服务的入口。src>main>e

Java拦截器与过滤器的区别

主要结论:运行顺序不同,过滤器先,拦截器后配置方式不同,过滤器web.xml,拦截器spring的配置文件过滤器依赖于servlet,拦截器依赖于Spring过滤器只能对request和response响应,拦截器还能对springmvc生态下的组件做处理。(说人话就是咱们现在用的都是人家spring的产品,那么拦截器

golang入门笔记——pprof性能分析

文章目录简介runtime/pprof的使用命令行交互网络服务性能分析pprof与性能测试结合压测工具go-wrk简介golang性能分析工具pprof的8个指标1.性能分析的5个方面:CPU、内存、I/O、goroutine(协程使用情况和泄漏检查)、死锁检测以及数据竟态分析runtime.SetMutexProfi

天地图绘制区域图层

背景:业务方要求将原效果图参考效果图最终实现效果变更点:1.将原有的高德地图改为天地图2.呈现形式修改:加两层遮罩:半透明遮罩层mask+区域覆盖物mask实现过程:1.更换地图引入源<linkrel="stylesheet"href="https://cdn.jsdelivr.net/npm/maptalks/dis

IntelliJ IDEA使用——常规设置

文章目录版本说明主题设置取消检查更新依赖自动导入禁止importxxx.*、允许import内部类显示行号、方法分割线、空格代码提示(匹配所有字母)自定义注释颜色添加头部注释自定义字体设置字符编码关联本地GitJDK编译版本Maven配置Tomcat配置代码注释设置头部注释单行注释HTML和XML注释IDEA同步设置版

使用电力系统稳定器 (PSS) 和静态 VAR 补偿器 (SVC) 提高瞬态稳定性(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。⛳️座右铭:行百里者,半于九十。📋📋📋本文目录如下:🎁🎁🎁目录💥1概述📚2运行结果🎉3参考文献🌈4Simulink仿真实现💥1概述电力系统稳定器(PSS)和静态VAR补偿器(S

热文推荐