package com.zs.websocket.demo6.utils;
import com.zs.websocket.demo6.handler.ScheduleTask;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.scheduling.support.CronTrigger;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ScheduledFuture;
/**
* 定时任务工具类
* @author 未来码匠
*/
public class ScheduleUtil {
private static final Log logger = LogFactory.getLog(ScheduleUtil.class);
private static final ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
private static final Map<String, ScheduledFuture<?>> scheduledFutureMap = new HashMap<>();
static{
threadPoolTaskScheduler.initialize();
logger.info("初始化线程池...");
}
/**
* 根据Cron表达式来启动指定的定时任务
*/
public static void start(ScheduleTask scheduleTask, CronTrigger cronTrigger){
if (isExist(scheduleTask.getId())){
logger.info("启动定时任务"+ scheduleTask.getId()+"失败,此任务已存在");
return;
}
ScheduledFuture<?> scheduledFuture = threadPoolTaskScheduler.schedule(scheduleTask, cronTrigger);
scheduledFutureMap.put(scheduleTask.getId(),scheduledFuture);
logger.info("启动定时任务"+ scheduleTask.getId()+",设置cron表达式为"+ cronTrigger.toString());
}
/**
* 取消指定的定时任务
*/
public static void cancel(ScheduleTask scheduleTask){
ScheduledFuture<?> scheduledFuture = scheduledFutureMap.get(scheduleTask.getId());
if(scheduledFuture != null && !scheduledFuture.isCancelled()){
scheduledFuture.cancel(false);
}
scheduledFutureMap.remove(scheduleTask.getId());
logger.info("取消定时任务"+ scheduleTask.getId());
}
/**
* 根据Cron表达式来重置指定的定时任务执行时间和相关内容
*/
public static void reset(ScheduleTask scheduleTask,CronTrigger cronTrigger){
String id = scheduleTask.getId();
ScheduledFuture<?> scheduledFuture = scheduledFutureMap.get(id);
if(scheduledFuture != null && !scheduledFuture.isCancelled()){
scheduledFuture.cancel(false);
}
scheduledFutureMap.remove(id);
//然后启动新的定时任务
scheduledFuture = threadPoolTaskScheduler.schedule(scheduleTask, cronTrigger);
scheduledFutureMap.put(id,scheduledFuture);
logger.info("重置定时任务"+ id+",设置cron表达式为"+ cronTrigger.toString());
}
/**
* 判断指定的定时任务是否存在或已经取消
*/
public static Boolean isExist(String id) {
ScheduledFuture<?> scheduledFuture = scheduledFutureMap.get(id);
return scheduledFuture != null && !scheduledFuture.isCancelled();
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
概要:本文介绍如何使用 Spring Boot 3.X 和 WebSocket 实现消息推送,并动态开启、关闭和取消定时任务。通过WebSocket实现实时通信,结合定时任务管理,可实现灵活的消息推送和任务控制。 使用人群:适合有Spring Boot开发经验、了解WebSocket和定时任务管理的开发人员。希望在实时通信场景中实现消息推送和动态任务管理功能。 使用场景及目标:本文旨在帮助开发人员实现实时消息推送和动态任务管理,适用于在线聊天、实时监控、实时数据展示等场景。目标是利用WebSocket技术实现消息即时推送,同时结合动态任务管理,控制消息推送的频率和内容。 其他说明:本文提供Spring Boot 3.X中WebSocket的配置和使用方法,包括示例代码。同时,介绍如何实现动态开启、关闭和取消定时任务,满足不同场景的需求。读者将能快速掌握相关技术,为项目增加实时消息推送和动态任务管理功能。 总结:本文详细介绍了如何利用Spring Boot 3.X和WebSocket实现消息推送和动态任务管理。读者通过本文的指导和示例,能够灵活应用这些功能,提升应用程序的实时性和交互性。
资源推荐
资源详情
资源评论
收起资源包目录
如何利用 Spring Boot 3.X 和 WebSocket 来实现消息推送功能,并实现动态开启、关闭和取消定时任务的功能? (113个子文件)
ScheduleUtil.class 4KB
ScheduleTask.class 4KB
WebSocketHandler.class 3KB
MyTask.class 3KB
Test.class 3KB
WebsocketDemo6Application.class 775B
WebSocketConfig.class 732B
WebsocketDemo6ApplicationTests.class 573B
mvnw.cmd 7KB
.DS_Store 8KB
.DS_Store 6KB
.DS_Store 6KB
.DS_Store 6KB
.DS_Store 6KB
.DS_Store 6KB
.DS_Store 6KB
.DS_Store 6KB
.gitignore 395B
.gitignore 176B
websocket-demo6.iml 9KB
maven-wrapper.jar 59KB
ScheduleUtil.java 3KB
WebSocketHandler.java 2KB
MyTask.java 1KB
ScheduleTask.java 522B
WebSocketConfig.java 453B
WebsocketDemo6Application.java 375B
WebsocketDemo6ApplicationTests.java 231B
Test.java 197B
HELP.md 1KB
mvnw 10KB
.name 15B
maven-wrapper.properties 1019B
uiDesigner.xml 9KB
workspace.xml 7KB
pom.xml 2KB
compiler.xml 878B
jarRepositories.xml 845B
Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_14_2.xml 724B
Maven__org_springframework_boot_spring_boot_test_autoconfigure_3_0_5.xml 701B
Maven__org_springframework_boot_spring_boot_starter_websocket_3_0_5.xml 694B
Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml 688B
Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_14_2.xml 683B
Maven__org_springframework_boot_spring_boot_starter_logging_3_0_5.xml 680B
Maven__org_springframework_boot_spring_boot_starter_tomcat_3_0_5.xml 673B
Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_14_2.xml 669B
Maven__org_springframework_boot_spring_boot_autoconfigure_3_0_5.xml 666B
Maven__org_springframework_boot_spring_boot_starter_test_3_0_5.xml 659B
Maven__org_springframework_boot_spring_boot_starter_json_3_0_5.xml 659B
Maven__org_springframework_boot_spring_boot_starter_web_3_0_5.xml 652B
Maven__org_apache_tomcat_embed_tomcat_embed_websocket_10_1_7.xml 648B
Maven__com_fasterxml_jackson_core_jackson_annotations_2_14_2.xml 639B
Maven__org_springframework_boot_spring_boot_starter_3_0_5.xml 624B
Maven__jakarta_annotation_jakarta_annotation_api_2_1_1.xml 621B
Maven__jakarta_activation_jakarta_activation_api_2_1_1.xml 621B
Maven__org_junit_platform_junit_platform_commons_1_9_2.xml 621B
Maven__com_fasterxml_jackson_core_jackson_databind_2_14_2.xml 618B
Maven__org_junit_platform_junit_platform_engine_1_9_2.xml 614B
Maven__org_apache_tomcat_embed_tomcat_embed_core_10_1_7.xml 613B
Maven__io_micrometer_micrometer_observation_1_10_5.xml 608B
Maven__org_springframework_boot_spring_boot_test_3_0_5.xml 603B
Maven__org_junit_jupiter_junit_jupiter_engine_5_9_2.xml 603B
Maven__org_junit_jupiter_junit_jupiter_params_5_9_2.xml 603B
Maven__org_apache_tomcat_embed_tomcat_embed_el_10_1_7.xml 599B
Maven__jakarta_xml_bind_jakarta_xml_bind_api_4_0_0.xml 599B
Maven__org_apache_logging_log4j_log4j_to_slf4j_2_19_0.xml 596B
Maven__org_springframework_spring_expression_6_0_7.xml 590B
Maven__com_fasterxml_jackson_core_jackson_core_2_14_2.xml 590B
Maven__org_mockito_mockito_junit_jupiter_4_8_1.xml 586B
Maven__org_springframework_spring_messaging_6_0_7.xml 583B
Maven__org_springframework_spring_websocket_6_0_7.xml 583B
Maven__org_junit_jupiter_junit_jupiter_api_5_9_2.xml 582B
Maven__io_micrometer_micrometer_commons_1_10_5.xml 580B
Maven__net_bytebuddy_byte_buddy_agent_1_12_23.xml 573B
Maven__org_springframework_spring_context_6_0_7.xml 569B
Maven__org_springframework_boot_spring_boot_3_0_5.xml 568B
Maven__org_springframework_spring_webmvc_6_0_7.xml 562B
Maven__org_apache_logging_log4j_log4j_api_2_19_0.xml 561B
Maven__org_apiguardian_apiguardian_api_1_1_2.xml 560B
Maven__ch_qos_logback_logback_classic_1_4_6.xml 556B
Maven__org_springframework_spring_beans_6_0_7.xml 555B
Maven__org_junit_jupiter_junit_jupiter_5_9_2.xml 554B
Maven__net_java_dev_jna_jna_platform_5_13_0.xml 550B
Maven__org_springframework_spring_core_6_0_7.xml 548B
Maven__org_springframework_spring_test_6_0_7.xml 548B
Maven__net_minidev_accessors_smart_2_4_9.xml 544B
Maven__org_springframework_spring_aop_6_0_7.xml 541B
Maven__org_springframework_spring_jcl_6_0_7.xml 541B
Maven__org_springframework_spring_web_6_0_7.xml 541B
Maven__ch_qos_logback_logback_core_1_4_6.xml 535B
Maven__com_jayway_jsonpath_json_path_2_7_0.xml 534B
Maven__net_bytebuddy_byte_buddy_1_12_23.xml 531B
Maven__org_assertj_assertj_core_3_23_1.xml 530B
Maven__org_skyscreamer_jsonassert_1_5_1.xml 525B
Maven__org_xmlunit_xmlunit_core_2_9_1.xml 523B
Maven__org_mockito_mockito_core_4_8_1.xml 523B
Maven__org_opentest4j_opentest4j_1_2_0.xml 521B
Maven__org_projectlombok_lombok_1_18_26.xml 519B
Maven__com_github_oshi_oshi_core_6_4_1.xml 518B
Maven__net_minidev_json_smart_2_4_10.xml 516B
共 113 条
- 1
- 2
资源评论
- 普通网友2023-07-27: 这篇文章详细介绍了如何利用Spring Boot 3.X和WebSocket实现消息推送功能,同时还讲述了如何动态开启、关闭和取消定时任务的功能,非常实用。
- 余青葭2023-07-27: 这篇文章很好地介绍了利用Spring Boot 3.X和WebSocket实现消息推送功能的方法,并且还提供了一种实现动态开启、关闭和取消定时任务的方式,很方便实用。
- 型爷2023-07-27: 作者通过简单明了的语言,深入浅出地解释了如何利用Spring Boot 3.X和WebSocket实现消息推送功能,同时还提供了动态开启、关闭和取消定时任务的方法,很有参考价值。
- 林书尼2023-07-27: 这篇文章详细描述了利用Spring Boot 3.X和WebSocket实现消息推送功能的步骤,同时还介绍了一种方便的方法来实现动态开启、关闭和取消定时任务。非常值得一读。
- 仙夜子2023-07-27: 作者以质朴的语言阐述了如何利用Spring Boot 3.X和WebSocket实现消息推送功能,并提供了动态开启、关闭和取消定时任务的解决方案,非常实用。
星际编程喵
- 粉丝: 4808
- 资源: 96
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功