需求:
前端发起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 动态创建多定时任务相关推荐

  1. Springboot定时任务原理及如何动态创建定时任务

    一.前言 上周工作遇到了一个需求,同步多个省份销号数据,解绑微信粉丝.分省定时将销号数据放到SFTP服务器上,我需要开发定时任务去解析文件.因为是多省份,服务器.文件名规则.数据规则都不一定,所以要做 ...

  2. SpringBoot集成Quartz实现定时任务的动态创建、启动、暂停、恢复、删除。

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 作者:毅大师 blog.csdn.net/qq_39648 ...

  3. 定时任务:创建静态定时任务、动态定时任务

    定时任务有三种实现 1 jdk自带的定时任务 2 Quartz插件实现的定时任务,需要引入额外的包 3 SpringTask定时调度,是对jdk的再一次封装,不用引入其他包了,用spring的包就自带 ...

  4. springBoot下使用quartz定时任务;动态修改任务执行时间

    先上依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spri ...

  5. SpringBoot根据配置文件动态创建Bean

    需求场景: 如果现在需要实现一个这样的需求: 根据配置信息动态控制是否创建任意Bean 通常我们会定义这样的配置: application.yml: 实现业务需求:根据enbaled控制下面bean- ...

  6. SpingBoot中创建动态和静态定时任务

    1,静态定时任务          1,创建静态定时任务类,位置放在启动类同级目录或者子包下面,方便扫描到定时任务类上的注解.  2,静态定时任务类需要三个注解:@Configuration,标记该类 ...

  7. java动态创建bean的意义_java相关:Spring Boot如何动态创建Bean示例代码

    java相关:Spring Boot如何动态创建Bean示例代码 发布于 2020-3-20| 复制链接 摘记: 前言本文主要给大家介绍了关于Spring Boot动态创建Bean的相关内容,分享出来 ...

  8. 玩转 SpringBoot 2 之整合定时任务篇

    前言 通过本文你将了解到如何在 SpringBoot 2 中整合定时任务使用教程,具体详细内容如下: SpringBoot 自带定时任务使用教程 SpringBoot 集成 JDK 定时任务使用教程 ...

  9. java动态创建bean的意义_Spring Boot如何动态创建Bean示例代码

    前言 本文主要给大家介绍了关于Spring Boot动态创建Bean的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. SpringBoot测试版本:1.3.4.RELEAS ...

最新文章

  1. P2759 奇怪的函数(二分答案,数学运算)
  2. linux 下 用户与用户组
  3. [转载] 七龙珠第一部——第121话 悟空最大的危机
  4. windows下python虚拟环境virtualenv安装和使用(亲测)
  5. 浅谈C#更改令牌ChangeToken
  6. (TI xDM)SSCR Module—Shared Scratch Memory
  7. 单词卡片被遗落的单词 その2
  8. 图书管理系统(一):出版社列表增加、删除和编辑
  9. 《树莓派Python编程入门与实战(第2版)》——2.2 使用Raspbian命令行
  10. CruiseControl 安装和启动
  11. 汽车电子功能安全标准ISO26262解析(六)——硬件集成测试
  12. matlab统计像元灰度值的函数,matlab像素值及统计
  13. 计算机课件制作技能,PPT技能制作大比拼
  14. 优化算法 - 遗传算法
  15. ngx_shmtx_lock 分析
  16. 学习Linux命令(11) startx
  17. java-php-python-ssm在线交友系统2021计算机毕业设计
  18. IEEE UV 2022 “Vision Meets Algae” 目标检测竞赛正式启动!
  19. 如何保护您的域名系统免遭劫持
  20. NLP学习笔记(四) Seq2Seq基本介绍

热门文章

  1. 统计学习方法-李航(6)
  2. ubuntu14.04+ceres安裝(亲测)
  3. IndexError:boolean index did not match indexed array along dimension 0
  4. 感想总结——热烈庆祝CSDN博客排名进入前20000名
  5. 【AI视野·今日NLP 自然语言处理论文速览 第十六期】Tue, 29 Jun 2021
  6. HTML5 CSS选择器总结(强烈推荐)
  7. 【C++ STL学习之七】STL算法之find和find_if
  8. xlrd读取单元格演练
  9. 零基础入门Python数据分析,只需要看懂这一张图,附下载链接!
  10. create-react-app教程-源码篇