SpringBoot 动态创建多定时任务
需求:
前端发起Socket请求,订阅K线数据,【参数:1min 5min。。。。】
后端根据参数创建定时任务,并定时将数据推送到前端
实现如下:
实现了socket连接即创建定时任务 socket关闭即销毁任务
SchedulingConfig
@Configuration
public class SchedulingConfig {@Beanpublic TaskScheduler taskScheduler() {ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();// 定时任务执行线程池核心线程数taskScheduler.setPoolSize(5);taskScheduler.setRemoveOnCancelPolicy(true);taskScheduler.setThreadNamePrefix("TaskSchedulerThreadPool-");return taskScheduler;}
}
CronTaskRegistrar
@Component
public class CronTaskRegistrar implements DisposableBean {private final Map<Runnable, ScheduledTask> scheduledTasks = new ConcurrentHashMap<>(16);@Autowiredprivate TaskScheduler taskScheduler;public TaskScheduler getScheduler() {return this.taskScheduler;}/*** 新增定时任务* @param task* @param cronExpression*/public void addCronTask(Runnable task, String cronExpression) {addCronTask(new CronTask(task, cronExpression));}public void addCronTask(CronTask cronTask) {if (cronTask != null) {Runnable task = cronTask.getRunnable();if (this.scheduledTasks.containsKey(task)) {removeCronTask(task);}this.scheduledTasks.put(task, scheduleCronTask(cronTask));}}/*** 移除定时任务* @param task*/public void removeCronTask(Runnable task) {ScheduledTask scheduledTask = this.scheduledTasks.remove(task);if (scheduledTask != null)scheduledTask.cancel();}public ScheduledTask scheduleCronTask(CronTask cronTask) {ScheduledTask scheduledTask = new ScheduledTask();scheduledTask.future = this.taskScheduler.schedule(cronTask.getRunnable(), cronTask.getTrigger());return scheduledTask;}@Overridepublic void destroy() {for (ScheduledTask task : this.scheduledTasks.values()) {task.cancel();}this.scheduledTasks.clear();}
}
ScheduledTask
public final class ScheduledTask {public volatile ScheduledFuture<?> future;/*** 取消定时任务*/public void cancel() {ScheduledFuture<?> future = this.future;if (future != null) {future.cancel(true);}}
}
使用示例:
@OnOpenpublic void onOpen(Session session,@PathParam("apiURL") String apiURL,@PathParam("publicKey") String publicKey,@PathParam("secretKey") String secretKey) throws IOException {registrar = (CronTaskRegistrar) context.getBean("cronTaskRegistrar");registrar.addCronTask(doTask(),cron);// registrar.removeCronTask(task);//取消任务}private Runnable doTask(){task = new Runnable(){@SneakyThrows@Overridepublic void run() {logger.info(frontConfig.getOpenConfig().getContactCode()+" "+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS").format(new Date()));historyKline = marketAPI.getSwapMarketHistoryKline(frontConfig.getOpenConfig().getContactCode(),frontConfig.getOpenConfig().getKLineType());System.out.println(historyKline);//if (session.isOpen())// session.getBasicRemote().sendText(JSON.toJSONString(historyKline));}};return task;}
ps:前三所示源码转载自csdn 具体哪个作者忘记了。。。
SpringBoot 动态创建多定时任务相关推荐
- Springboot定时任务原理及如何动态创建定时任务
一.前言 上周工作遇到了一个需求,同步多个省份销号数据,解绑微信粉丝.分省定时将销号数据放到SFTP服务器上,我需要开发定时任务去解析文件.因为是多省份,服务器.文件名规则.数据规则都不一定,所以要做 ...
- SpringBoot集成Quartz实现定时任务的动态创建、启动、暂停、恢复、删除。
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 作者:毅大师 blog.csdn.net/qq_39648 ...
- 定时任务:创建静态定时任务、动态定时任务
定时任务有三种实现 1 jdk自带的定时任务 2 Quartz插件实现的定时任务,需要引入额外的包 3 SpringTask定时调度,是对jdk的再一次封装,不用引入其他包了,用spring的包就自带 ...
- springBoot下使用quartz定时任务;动态修改任务执行时间
先上依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spri ...
- SpringBoot根据配置文件动态创建Bean
需求场景: 如果现在需要实现一个这样的需求: 根据配置信息动态控制是否创建任意Bean 通常我们会定义这样的配置: application.yml: 实现业务需求:根据enbaled控制下面bean- ...
- SpingBoot中创建动态和静态定时任务
1,静态定时任务 1,创建静态定时任务类,位置放在启动类同级目录或者子包下面,方便扫描到定时任务类上的注解. 2,静态定时任务类需要三个注解:@Configuration,标记该类 ...
- java动态创建bean的意义_java相关:Spring Boot如何动态创建Bean示例代码
java相关:Spring Boot如何动态创建Bean示例代码 发布于 2020-3-20| 复制链接 摘记: 前言本文主要给大家介绍了关于Spring Boot动态创建Bean的相关内容,分享出来 ...
- 玩转 SpringBoot 2 之整合定时任务篇
前言 通过本文你将了解到如何在 SpringBoot 2 中整合定时任务使用教程,具体详细内容如下: SpringBoot 自带定时任务使用教程 SpringBoot 集成 JDK 定时任务使用教程 ...
- java动态创建bean的意义_Spring Boot如何动态创建Bean示例代码
前言 本文主要给大家介绍了关于Spring Boot动态创建Bean的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. SpringBoot测试版本:1.3.4.RELEAS ...
最新文章
- P2759 奇怪的函数(二分答案,数学运算)
- linux 下 用户与用户组
- [转载] 七龙珠第一部——第121话 悟空最大的危机
- windows下python虚拟环境virtualenv安装和使用(亲测)
- 浅谈C#更改令牌ChangeToken
- (TI xDM)SSCR Module—Shared Scratch Memory
- 单词卡片被遗落的单词 その2
- 图书管理系统(一):出版社列表增加、删除和编辑
- 《树莓派Python编程入门与实战(第2版)》——2.2 使用Raspbian命令行
- CruiseControl 安装和启动
- 汽车电子功能安全标准ISO26262解析(六)——硬件集成测试
- matlab统计像元灰度值的函数,matlab像素值及统计
- 计算机课件制作技能,PPT技能制作大比拼
- 优化算法 - 遗传算法
- ngx_shmtx_lock 分析
- 学习Linux命令(11) startx
- java-php-python-ssm在线交友系统2021计算机毕业设计
- IEEE UV 2022 “Vision Meets Algae” 目标检测竞赛正式启动!
- 如何保护您的域名系统免遭劫持
- NLP学习笔记(四) Seq2Seq基本介绍
热门文章
- 统计学习方法-李航(6)
- ubuntu14.04+ceres安裝(亲测)
- IndexError:boolean index did not match indexed array along dimension 0
- 感想总结——热烈庆祝CSDN博客排名进入前20000名
- 【AI视野·今日NLP 自然语言处理论文速览 第十六期】Tue, 29 Jun 2021
- HTML5 CSS选择器总结(强烈推荐)
- 【C++ STL学习之七】STL算法之find和find_if
- xlrd读取单元格演练
- 零基础入门Python数据分析,只需要看懂这一张图,附下载链接!
- create-react-app教程-源码篇