基于Springboot的运行时动态可调的定时任务
配置类
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;@Configuration
public class TaskSchedulerConfig {@Bean(destroyMethod = "shutdown")public ThreadPoolTaskScheduler taskScheduler() {ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();scheduler.setPoolSize(自定义池大小,可以通过配置指定大小);scheduler.initialize();return scheduler;}
}
创建和删除定时任务的接口示例
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.scheduling.support.CronTrigger;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import java.time.LocalDateTime;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ScheduledFuture;@Slf4j
@RestController
@RequestMapping("/task")
public class InnerCommonController {@GetMapping("/c")public ResponseEntity<?> create(@RequestParam("cron") String cron,@RequestParam("taskId") String taskId) {Runnable task = () -> {System.out.println("Executing task: " + taskId + LocalDateTime.now());// 执行任务的具体逻辑};CronTrigger trigger = new CronTrigger(cron);ScheduledFuture<?> future = taskScheduler.schedule(task, trigger);scheduledTasks.put(taskId, future);return ResponseEntity.ok().build();}@GetMapping("/d")public ResponseEntity<?> delete(@RequestParam("taskId") String taskId) {ScheduledFuture<?> future = scheduledTasks.remove(taskId);if (future != null) {future.cancel(false); // 取消任务return ResponseEntity.ok().build();} else {return ResponseEntity.notFound().build();}}
}
调用示例
新增,cron表达式encode了,3秒一次
http://127.0.0.1:8080/demo/task/c?cron=0/3%20*%20*%20*%20*%20?%20&taskId=2024
删除
http://127.0.0.1:8080/demo/task/task/d?taskId=2024
创建后日志打印结果
Executing task: 20242024-08-05T13:50:03.013
Executing task: 20242024-08-05T13:50:06.014
Executing task: 20242024-08-05T13:50:09.003
Executing task: 20242024-08-05T13:50:12.011
Executing task: 20242024-08-05T13:50:15.012
Executing task: 20242024-08-05T13:50:18.007
相关文章:
基于Springboot的运行时动态可调的定时任务
配置类 import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;Configuration public class TaskSchedulerConfig {Bean(destroyMe…...
linux perf
perf是Linux性能分析工具的集合,它提供了丰富的命令来收集和分析程序运行时的性能数据。perf能够报告CPU使用率、缓存命中率、分支预测成功率等多种硬件级别的事件,同时也支持软件级别的事件,如页面错误、任务切换等。perf是理解程序性能瓶颈…...
Linux--网络层IP
IP协议 IP协议,全称Internet Protocol(互联网协议),是TCP/IP协议族中的核心协议之一,用于在互联网络上进行数据的传输。IP协议的主要功能是确保数据从一个网络节点(如计算机、服务器、路由器等)…...
浅谈vite之import.meta
一. 解析 开发者使用一个模块时,有时需要知道模板本身的一些信息(比如模块的路径)。现在有一个提案,为 import 命令添加了一个元属性 import.meta,返回当前模块的元信息。 import.meta只能在模块内部使用,如…...
【Pytorch实用教程】Pytorch中nn.Sequential的用法
nn.Sequential 是 PyTorch 中用于构建神经网络的一种容器类,它可以按顺序封装多个子模块(层),并依次将输入数据传递给这些子模块。这样可以简化模型的定义,使得代码更加简洁和易读。 文章目录 基本用法方法一:直接传递子模块方法二:使用 `OrderedDict`动态构建模型优点注…...
Shopify被封?Shopify店铺开店到防封全面指南
Shopify,作为独立电商建站领域的佼佼者,其SaaS模式简化了建站流程,无需编程背景即可创建线上店铺,吸引了众多商家的目光。本文将详细讲解Shopify店铺从注册、运营到防封的每一个关键环节,为商家提供一站式指导…...
11. 盛最多水的容器
一题目: 二:代码: class Solution { public:int maxArea(vector<int>& height) {int l0;int rheight.size()-1;int ans0;while(l<r){int a(r-l)*min(height[l],height[r]);ansmax(ans,a);if(height[l]<height[r]) l;else r-…...
react如何父子组件传参
在React中,父子组件之间的传参主要通过props(属性)来实现。子组件通过props接收来自父组件的数据,而父组件则可以通过在子组件标签上设置属性(即props)来传递数据。下面是一个简单的例子来说明这个过程。 …...
【C++】二维数组 数组名
二维数组名用途 1、查看所占内存空间 2、查看二维数组首地址 针对第一种用途,还可以计算数组有多少行、多少列、多少元素 针对第二种用途,数组元素、行数、列数都是连续的,且相差地址是有规律的 下面是一个实例 #include<iostream&g…...
【蘑菇书EasyRL】强化学习,笔记整理
【蘑菇书EasyRL】强化学习,笔记整理 1.笔记整理1.1 学习和决策代码框架 2. 遇到的buggym 环境,新版本python无法使用env_specs envs.registry.all() 报错 蘑菇书的教程地址: https://datawhalechina.github.io/easy-rl/#/chapter1/chapter1?…...
尚硅谷谷粒商城项目笔记——三、安装docker【电脑CPU:AMD】
三、安装docker 注意: 因为电脑是AMD芯片,自己知识储备不够,无法保证和课程中用到的环境一样,所以环境都是自己根据适应硬件软件环境重新配置的,这里的虚拟机使用的是VMware。 首先关闭防火墙和安全策略 systemctl…...
【8-9月份唯一机械电气计算机主题的IEEE会议】第七届机电一体化与计算机技术工程国际学术会议(MCTE 2024,8月23-25)
由广东博士创新发展促进会、输变电装备技术全国重点实验室联合主办,重庆大学电气工程学院、AEIC学术交流中心协办的第七届机电一体化与计算机技术工程国际学术会议(MCTE 2024)将于2024年8月23-25日在中国广州隆重举行。 大会诚挚邀请您投递相…...
YOLOv8改进 | 主干网络 | 简单而优雅且有效的VanillaNet 【华为诺亚方舟】
秋招面试专栏推荐 :深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 专栏目录 :《YOLOv8改进有效涨点》专栏介绍 & 专栏目录 | 目前已有80+篇内容,内含各种Head检测头、损失函数Loss、…...
Tomcat高可用集群(实例详解)
一.环境准备 虚拟机的版本:VMware-workstation-full-15.5.6-16341506.exe系统镜像版本:CentOS-6.10-x86_64-bin-DVD1.iso,全新安装,桌面版,可上网系统内存大小:1GB系统硬盘大小:20GB连接工具版…...
搭建自己的金融数据源和量化分析平台(五):更新两市退市股票信息
在前面的股票列表设计中,我们有一个list_status字段,可能的值为L上市 D退市 P暂停上市。 由于股票可能会被退市,因此需要该字段来维护上市状态。 深市爬虫: # 读取深交所最新退市股票列表 def get_delisted_stock_list():cache_f…...
Redis复习总结
之前写的博客太杂,最近想把Redis的知识点再系统的过一遍,带着自己的理解使用简短的话把一些问题总结一下,尤其是开发中和面试中的高频问题,基础知识点参考–>Redis入门、Spring Cache,这篇不再赘述。 目录 基础简介;与Memcached的区别;为什么作为mysql缓存?如何保证R…...
基于JSP的医院挂号系统
你好,我是专注于医疗信息系统的计算机专业毕业生。如果您对医院挂号系统感兴趣或有相关需求,欢迎随时联系我。 开发语言:Java 数据库:MySQL 技术:JSP技术 工具:MyEclipse 系统展示 首页 管理员功能模…...
Chainlit快速实现AI对话应用1 分钟内实现聊天数据的持久化保存
概述 默认情况下,Chainlit 应用不会保留其生成的聊天和元素。即网页一刷新,所有的聊天记录,页面上的所有聊天记录都会消失。但是,存储和利用这些数据的能力可能是您的项目或组织的重要组成部分。 一旦启用,数据持久性…...
STM32DMA数据传输
我估计大多数人学这么久连听说都没听说过DMA,更不用提知道它是干嘛的。其实DMA的本质就是一个数据的搬运工。平常的时候当我们没有配置的时候,一直都是CPU在搬运数据,但是这个活又累又没有技术含量,所以DMA的重要性还是有的。 目…...
Python学习笔记50:游戏篇之外星人入侵(十一)
前言 本篇文章接着之前的内容,继续对游戏功能进行优化,主要是优化游戏状态以及对应的处理。 状态 一个游戏包含多种状态,这个状态是一个可以很复杂也可以很简单的内容。条件所限,我们这个游戏的状态就比较简单: 未…...
YOLOX训练避坑指南:从VOC数据集制作到模型调优的全流程实战
YOLOX实战避坑手册:VOC数据集构建与工业级调优策略 当你第一次在屏幕上看到YOLOX识别出目标物体时,那种成就感就像解开一道复杂的数学题。但在此之前,大多数开发者都会在数据准备、环境配置和参数调优这三个环节反复跌倒。去年我们团队在智能…...
利率曲线构建终极指南:掌握 tf-quant-finance 中的 Hagan-West 算法和单调凸插值
利率曲线构建终极指南:掌握 tf-quant-finance 中的 Hagan-West 算法和单调凸插值 【免费下载链接】tf-quant-finance High-performance TensorFlow library for quantitative finance. 项目地址: https://gitcode.com/gh_mirrors/tf/tf-quant-finance 在金融…...
UniApp扫码插件性能横评:从MLKit毫秒级到ZXing经典方案的实战选型
1. UniApp扫码插件选型指南:为什么性能如此重要 扫码功能已经成为现代移动应用的标配,从电商购物到物流追踪,从票务核验到社交互动,几乎每个场景都需要快速、稳定的扫码体验。但在实际开发中,很多团队都会遇到这样的困…...
推荐3款文字转语音小工具,总有一款适合你
聊一聊现在用眼太多,眼睛太累,不想再看电脑和手机了。想用耳朵来分担一下。特别是一些文字,电子书方面的。能听还是听吧,看也不一定能看进去,听的话,有可能还是能听进去一点。所以,就找了一些文…...
【RocketMQ】消息重试机制深度解析:从异常处理到死信队列的最佳实践
1. RocketMQ消息重试机制全景解读 第一次接触RocketMQ的重试功能时,我踩过一个坑:线上系统突然出现大量消息堆积,排查后发现是消费者处理异常导致消息不断重试。这个经历让我深刻认识到,理解消息重试机制是保障分布式系统可靠性的…...
5个高效技巧:downkyi批量下载完全指南
5个高效技巧:downkyi批量下载完全指南 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等)。 项目…...
艾米森冲刺港股:年营收1542万 亏4898万
雷递网 雷建平 4月7日武汉艾米森生命科技股份有限公司(简称:“艾米森”)日前更新招股书,准备在港交所上市。年营收1542万 亏4898万艾米森于2015年1月成立,是一家早期癌症检测公司,战略聚焦于高发病率、高死…...
3个步骤掌握Unity游戏插件加载:MelonLoader使用指南
3个步骤掌握Unity游戏插件加载:MelonLoader使用指南 【免费下载链接】MelonLoader The Worlds First Universal Mod Loader for Unity Games compatible with both Il2Cpp and Mono 项目地址: https://gitcode.com/gh_mirrors/me/MelonLoader 你是否曾想为喜…...
EEG数据处理全攻略:从EDF文件读取到.set文件保存的完整MATLAB代码示例
EEG数据处理全攻略:从EDF文件读取到.set文件保存的完整MATLAB代码示例 在神经科学研究中,脑电图(EEG)数据的处理是基础且关键的一环。对于使用MATLAB进行EEG数据分析的研究人员来说,从原始EDF文件读取到最终保存为.set格式的完整流程…...
Wan2.2-I2V-A14B私有化部署:基于SpringBoot的后端服务集成指南
Wan2.2-I2V-A14B私有化部署:基于SpringBoot的后端服务集成指南 1. 企业级视频生成平台需求分析 在数字内容创作领域,企业经常面临视频制作效率低下的痛点。传统视频制作流程需要专业团队投入大量时间,从脚本编写到后期剪辑往往需要数周时间…...
