做框架模板的网站/净水器十大品牌
目录
- 定时任务管理器
- 定时任务的任务接口
- 定时任务和定时任务结果的缓存对象
- 定时任务
- 使用姿势
定时任务管理器
- 负责启动一个定时任务、停止一个定时任务、更新一个定时任务
/*** 定时任务管理器* 1、创建并启动一个定时任务* 2、停止一个定时任务* 3、更新一个定时任务*/
public class ScheduleManager {private final Logger logger = LoggerFactory.getLogger(ScheduleManager.class);@Autowiredprivate ThreadPoolTaskScheduler taskScheduler;/*** 内部正在执行的定时任务缓存*/private final Map<String, ScheduleTaskHolder> cache = new ConcurrentHashMap<>();public ScheduleManager(ThreadPoolTaskScheduler taskScheduler) {this.taskScheduler = taskScheduler;}/*** 启动一个定时任务** @param scheduleTask 定时任务实现类* @param cron 定时任务的cron表达式* @return key*/public String startTask(ScheduleTask scheduleTask, String cron) {ScheduledFuture<?> scheduledFuture = taskScheduler.schedule(scheduleTask, new CronTrigger(cron));String key = UUID.randomUUID().toString();ScheduleTaskHolder holder = new ScheduleTaskHolder(scheduleTask, scheduledFuture);cache.put(key, holder);logger.info("{} 定时任务启动成功!唯一标识为:{}", scheduleTask.getName(), key);return key;}/*** 停止一个定时任务** @param key 定时任务的唯一标识*/public void stopTask(String key) {if (StringUtils.isBlank(key)) {return;}ScheduleTaskHolder holder = cache.get(key);if (Objects.isNull(holder)) {return;}ScheduledFuture scheduledFuture = holder.getScheduledFuture();boolean cancel = scheduledFuture.cancel(true);if (cancel) {logger.info("{} 定时任务停止成功!唯一标识为:{}", holder.getScheduleTask().getName(), key);} else {logger.error("{} 定时任务停止失败!唯一标识为:{}", holder.getScheduleTask().getName(), key);}}/*** 更新一个定时任务的执行时间** @param key 定时任务的唯一标识* @param cron 新的cron表达式* @return key*/public String changeTask(String key, String cron) {if (StringUtils.isAnyBlank(key, cron)) {throw new RuntimeException("定时任务的唯一标识以及新的执行表达式不能为空");}ScheduleTaskHolder holder = cache.get(key);if (Objects.isNull(holder)) {throw new RuntimeException(key + "唯一标识不存在");}stopTask(key);return startTask(holder.getScheduleTask(), cron);}}
定时任务的任务接口
- 定时任务的运行逻辑在重写的
run
方法中实现
/*** 定时任务的任务接口*/
public interface ScheduleTask extends Runnable {/*** 获取定时任务的名称** @return*/String getName();}
定时任务和定时任务结果的缓存对象
- 负责缓存定时任务和控制该定时任务
/*** 定时任务和定时任务结果的缓存对象*/
public class ScheduleTaskHolder implements Serializable {/*** 执行任务实体*/private ScheduleTask scheduleTask;/*** 执行任务的结果实体*/private ScheduledFuture scheduledFuture;public ScheduleTaskHolder() {}public ScheduleTaskHolder(ScheduleTask scheduleTask, ScheduledFuture scheduledFuture) {this.scheduleTask = scheduleTask;this.scheduledFuture = scheduledFuture;}public ScheduleTask getScheduleTask() {return scheduleTask;}public void setScheduleTask(ScheduleTask scheduleTask) {this.scheduleTask = scheduleTask;}public ScheduledFuture getScheduledFuture() {return scheduledFuture;}public void setScheduledFuture(ScheduledFuture scheduledFuture) {this.scheduledFuture = scheduledFuture;}
}
定时任务
- 具体实现的定时任务
/*** 定时任务*/
public class ThreadPoolWarnTask implements ScheduleTask {@Overridepublic String getName() {return "threadPoolWarnTask";}@Overridepublic void run() {}
}
使用姿势
- 引入 ScheduleManager 对象
- 开启定时任务、关闭定时任务、更新定时任务
// 传入一个定时任务和CRON表达式开启定时任务,返回该定时任务的唯一标识
String taskKey = scheduleManager.startTask(threadPoolWarnTask, CRON);
// 停止定时任务
scheduleManager.stopTask(taskKey);
// 更新定时任务的CRON
scheduleManager.changeTask(taskKey, newCRON);
相关文章:

SpringBoot实现定时任务的动态停止和更新
目录 定时任务管理器定时任务的任务接口定时任务和定时任务结果的缓存对象定时任务使用姿势 定时任务管理器 负责启动一个定时任务、停止一个定时任务、更新一个定时任务 /*** 定时任务管理器* 1、创建并启动一个定时任务* 2、停止一个定时任务* 3、更新一个定时任务*/ publi…...

【threejs】火焰特效制作
2024-06-26 08-57-16火焰 shader 来源 //shadertory:https://www.shadertoy.com/view/ctVGD1//shadertory:https://www.shadertoy.com/view/ml3GWs 代码 import { DoubleSide, ShaderChunk, ShaderMaterial } from "three";export default fu…...

五原则四实践,REST API安全性请谨记
云原生和微服务架构等技术的流行让API受到越来越大的重视。那么当应用程序开始上云,各项需求都可以通过云服务满足的情况下,应用程序,尤其基于云端API的应用程序的安全问题该如何解决? 表现层状态转移(REST࿰…...

1390:食物链【NOI2001】
【解题思路】 并查集把三类动物划分成三个域,同类域(1-n)、捕食域〈n1-2n)、天敌域(2n1-3n)。把x放入同类域,xn放入其捕食域,x2n放入其天敌域。给在其他集合内安插两个“虚拟代表”…...

ICMAN液位检测——WS003B管道检测模组
ICMAN液位检测之WS003B管道检测模组 体积小,成本低, 液位检测精度高, 有水输出低电平无水高电平, 适用于饮水机、咖啡机、扫地机器人、洗地机等, 有需要朋友快联系我吧! AWE展会不容错过的ICMAN检测模组…...

YOLOv10使用教程及导读
首先推荐一下我的YOLOv8/v10项目,仅需一个v8的钱(69.9),付费进群,即可获取v8/v10的全部改进,欢迎进群。 1 YOLOv10简介 论文链接:https://arxiv.org/pdf/2405.14458 官方代码链接:ht…...

AIGC 在前端流式获取内容SSE
AIGC 在前端流式获取内容SSE 简介具体实现 简介 在 OpenAI 的 API 中,SSE 通常用于实现实时数据传输。例如,在聊天模型(如 ChatGPT)中,使用 SSE 可以让客户端实时接收到生成的对话内容,而不需要等待整个响…...

深度解析安全阀检测技术:方法与挑战
在工业生产中,安全阀作为防止压力容器和管道发生过压事故的关键部件,其性能和可靠性对于保证设备安全和人员安全具有重要意义。随着工业化进程的不断深入,对安全阀的检测和维护工作也日益受到重视。 接下来,佰德旨在探讨安全阀检…...

网络安全--安全设备(一)Dos
安全设备--Dos 一、Dos 是什么二、DDos是什么三、Dos&DDos的区别四、产品防御Dos&DDos方式五、常见的DDoS攻击类型包括但不限于以下几种: 一、Dos 是什么 Dos(拒绝服务攻击,Denial-of-Service),是一种试图通过压倒网络或服务器来阻止合法用户访…...

<电力行业> - 《第3课:国家电网公司100条名词解释》
序号术语解 释1十不干一、无票的不干;二、工作任务、危险点不清楚的不干;三、危险点控制措施未落实的不干;四、超出作业范围未经审批的不干;五、未在接地保护范围内的不干;六、现场安全措施布置不到位、安全工器具不合…...

“论数据访问层设计技术及其应用”写作框架,系统架构设计师
论文真题 在信息系统的开发与建设中,分层设计是一种常见的架构设计方法,区分层次的目的是为了实现“高内聚低耦合”的思想。分层设计能有效简化系统复杂性,使设计结构清晰,便于提高复用能力和产品维护能力。一种常见的层次划分模…...

Docker部署前端,动态配置后端地址
本文介绍了使用Docker环境变量动态配置nginx。采用的是通过docker run -e xxxxxxx先往容器注入环境变量,然后进一步通过envsubst指令将环境变量写入到conf文件中,实现动态配置文件内容。 背景 前后端分离的架构下,经常会用到nginx反向代理来…...

k8s强制删除一个 Pod
在Kubernetes(K8s)中强制删除一个Pod,通常是因为Pod处于错误状态或无法正常终止。以下是强制删除Pod的步骤和相关信息: ### 步骤一:获取Pod的名称 首先,你需要知道要删除的Pod的名称。可以使用kubectl get …...

docker的安装配置及使用
一.Docker的由来 Docker 最初是 dotCloud 公司创始人Solomon Hykes 在法国期间发起的一个公司内部项目。 2010年的专门做PAAS平台,但是到了2013年的时候,像亚马逊,微软,Google都开始做PAAS平台。 到了2013年,公司资金链…...

初阶 《操作符详解》 10. 逗号表达式
10. 逗号表达式 exp1, exp2, exp3, …expN 注: 1.逗号表达式,就是用逗号隔开的多个表达式 2.逗号表达式,从左向右依次执行,整个表达式的结果是最后一个表达式的结果 代码1 #include <stdio.h> int main() {int a 1;int b…...

【区分vue2和vue3下的element UI Loading 加载组件,分别详细介绍属性,事件,方法如何使用,并举例】
首先,需要澄清的是,Element UI 是为 Vue 2 设计的,而 Element Plus 是 Element UI 的 Vue 3 版本。在 Element UI 和 Element Plus 中,并没有一个直接名为 “Loading 加载” 的独立组件。相反,加载效果通常是通过指令、…...

数据结构:栈(stack)详解 c++信息学奥赛基础知识讲解
目录 一、栈的定义 二、栈的操作 三、代码实操 四、栈的实现 1、string实现stack 2、vector实现stack 3、deque实现栈 一、栈的定义 stack是一个比较简单易用的数据结构,stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中ÿ…...

电商返利系统的高并发处理与性能优化
电商返利系统的高并发处理与性能优化 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 在电子商务平台中,返利系统是吸引用户和提升用户粘性的重要功…...

NPM 常用命令
NPM 常用命令 NPM(Node Package Manager)是 JavaScript 生态系统中最流行的包管理工具,它不仅可以管理 Node.js 项目的依赖,还提供了丰富的命令来管理和发布你的代码。本文将从不同角度,深入浅出地介绍 NPM 的常用命令…...

C++进修——C++核心编程
内存分区模型 C程序在执行时,将内存大方向划分为4个区域 代码区:存放函数体的二进制编码,由操作系统进行管理全局区:存放全局变量和静态变量以及常量栈区:由编译器自动分配释放,存放函数的参数值ÿ…...

【信息系统项目管理师知识点速记】项目文档管理
19.3 项目文档管理 信息系统相关信息(文档)是指某种数据媒体和其中所记录的数据。文档具有永久性,并可以由人或机器阅读,通常用于描述人工可读的内容。在软件工程中,文档常常用来表示对活动、需求、过程或结果进行描述、定义、规定、报告或认证的任何书面或图示的信息(包…...

服务器硬件,raid配置
文章目录 服务器硬件RAID磁盘阵列RAID 0RAID 1RAID 5RAID 6RAID 10 阵列卡,阵列卡的缓存阵列卡阵列卡的缓存 软RAID磁盘阵列RAID阵列的管理及设备恢复mdadm 服务器硬件 处理器(CPU):服务器的核心组件,负责执行计算和指令操作。服务器常使用多…...

fc-list命令使用指南
fc-list命令使用指南 一、什么是fc-list? fc-list是FontConfig库的一部分,最初为Linux和其他Unix-like系统开发。我们可以用这个命令行快速查询和列出系统中安装的字体。 现在,Windows用户也集成了这个工具,所以我们来讲解一下用法。 二、…...

NAS安全存储怎样实现更精细的数据权限管控?
NAS存储,即网络附属存储(Network Attached Storage),是一种专用数据存储服务器,其核心特点在于将数据存储设备与网络相连,实现集中管理数据的功能。 NAS存储具有以下明显优势,而被全球范围内的企…...

第三十篇——等价性:如何从等价信息里找答案?
目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么? 四、总结五、升华 一、背景介绍 知道了等价性的逻辑,通过等价性去衡量事物,像是给…...

RabbitMQ实践——搭建多人聊天服务
大纲 用户登录创建聊天室监听Stream(聊天室)发送消息实验登录Tom侧Jerry侧 创建聊天室Jerry侧Tom侧 进入聊天室Jerry侧Tom侧 发送消息Jerry发送消息Jerry侧聊天室Tom侧聊天室 Tom发送消息Jerry侧聊天室Tom侧聊天室 代码工程参考资料 在《RabbitMQ实践——…...

git分布式版本控制系统
Git - Downloads (git-scm.com) gitee教程(超全,超详细,超长)-CSDN博客 Git教程 - 廖雪峰的官方网站 (liaoxuefeng.com) 所有的版本控制系统,其实只能跟踪文本文件改动,比如TXT文件,网页&…...

基于weixin小程序的民宿短租系统的设计与实现
管理员账户功能包括:系统首页,个人中心,房主管理,房间类型管理,用户管理,民宿信息管理,民宿预订管理,系统管理 小程序功能包括:系统首页,民宿信息,…...

2024-06-22力扣每日一题
链接: 2663. 字典序最小的美丽字符串 题意 略 解: 要求字符串内不存在任何长度为 2 或更长的回文子字符串,则在任意位置不存在aa或aba形式 由于要被给定字符串字典序大,且找到符合条件的字典序最小字符串,则竟可…...

S_LOVE多端恋爱小站小程序源码 uniapp多端
S_LOVE多端恋爱小站小程序源码,采用uniapp多端开发框架进行开发,目前已适配H5、微信小程序版本。 源码下载:https://download.csdn.net/download/m0_66047725/89421726 更多资源下载:关注我。...