【记录】【springboot】动态定时任务ScheduledFuture,可添加、修改、删除

这里只演示添加和删除任务的,因为修改就是删除任务再添加而已。

方便演示,任务就是每3秒打印

1、没有任务

后台

2、添加一个任务

3、再添加一个任务

4、删除一个任务

5、再添加一个任务

6、代码

运行任务线程的代码TaskRunnable.java

import com.xiaostudy.shiro_test1.utils.DateUtils;

public class TaskRunnable implements Runnable  {
    private String name;
    public TaskRunnable(String name) {
        this.name = name;
    }
    @Override
    public void run() {
        System.out.println(name + "---动态定时任务运行---" + DateUtils.getDateTime());
    }
}

TaskController.java

 1 import com.xiaostudy.shiro_test1.task.TaskRunnable;
 2 import org.springframework.beans.factory.annotation.Autowired;
 3 import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
 4 import org.springframework.scheduling.support.CronTrigger;
 5 import org.springframework.stereotype.Controller;
 6 import org.springframework.web.bind.annotation.RequestMapping;
 7 import org.springframework.web.bind.annotation.ResponseBody;
 8
 9 import java.util.HashMap;
10 import java.util.Map;
11 import java.util.concurrent.ScheduledFuture;
12 import java.util.stream.Collectors;
13
14 @Controller
15 @RequestMapping("/task")
16 public class TaskController {
17
18     private Map<String, ScheduledFuture<?>> taskMap = new HashMap<>();
19
20     @Autowired
21     private ThreadPoolTaskScheduler threadPoolTaskScheduler;
22
23     @RequestMapping("addTask")
24     @ResponseBody
25     public boolean addTask(String name){
26         String zhangsanCron = "*/3 * * * * ?";
27         return add(name, zhangsanCron);
28     }
29
30     @RequestMapping("stopTask")
31     @ResponseBody
32     public boolean stopTask(String name){
33         return stop(name);
34     }
35
36     @RequestMapping("listTask")
37     @ResponseBody
38     public String listTask(){
39         return taskMap.keySet().stream().map(name -> name).collect(Collectors.joining(","));
40     }
41
42     private boolean add(String name, String cron) {
43         if(null != taskMap.get(name)) {
44             return false;
45         }
46         ScheduledFuture<?> schedule = threadPoolTaskScheduler.schedule(new TaskRunnable(name), new CronTrigger(cron));
47         taskMap.put(name, schedule);
48         return true;
49     }
50
51     private boolean stop(String name) {
52         if(null == taskMap.get(name)) {
53             return false;
54         }
55         ScheduledFuture<?> scheduledFuture = taskMap.get(name);
56         scheduledFuture.cancel(true);
57         taskMap.remove(name);
58         return true;
59     }
60 }

7、讲解

开始定时任务就是ScheduledFuture<?> schedule = threadPoolTaskScheduler.schedule(new TaskRunnable(name), new CronTrigger(cron));

cron任务调度,比如*/3 * * * * ?表示每3秒执行任务

new TaskRunnable(name)就是实现Runnable的线程,任务处理在run()

ScheduledFuture<?>可以理解就是一个定时任务

任务保存在数据库,当应用开启后立刻查看所有任务,用Map<String, ScheduledFuture<?>>装起来,key可以用id保证其唯一性

小白刚刚接触,只有简单的实现,没有考虑数据量大等问题。仅做记录

原文地址:https://www.cnblogs.com/xiaostudy/p/11664464.html

时间: 2024-10-09 17:34:36

【记录】【springboot】动态定时任务ScheduledFuture,可添加、修改、删除的相关文章

动态添加修改删除html表格内容

1.需求 需要实现收银台上添加修改删除商品信息时顾显可以实时看到其变化 2.解决 收银台和顾显通过tcp传输进行数据通信,顾显通过操作html中的表格进行数据添加修改和删除操作 3.代码 mytest.html <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Dynamic Table<

【转】C#添加修改删除文件文件夹大全

[转]C#添加修改删除文件文件夹大全 C#添加修改删除文件文件夹大全 StreamWriter sw = File.AppendText(Server.MapPath(".")+"\\myText.txt");sw.WriteLine("追逐理想");sw.WriteLine("kzlll");sw.WriteLine(".NET笔记");sw.Flush();sw.Close();C#拷贝文件string

打通前后端全栈开发node+vue进阶【课程学习系统项目实战详细讲解】(3):用户添加/修改/删除 vue表格组件 vue分页组件

第三章 建议学习时间8小时      总项目预计10章 学习方式:详细阅读,并手动实现相关代码(如果没有node和vue基础,请学习前面的vue和node基础博客[共10章] 演示地址:后台:demoback.lalalaweb.com  前台:demo.lalalaweb.com 演示过程中可能会发现bug,希望即时留言反馈,谢谢 源码下载:https://github.com/sutianbinde/classweb               //不是全部的代码,每次更新博客才更新代码 学

FileSystemObject组件新建读取添加修改删除功能实例

<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>FileSystemObject组件应该实例</title> </head> <

Web 1三级联动 下拉框 2添加修改删除 弹框

Web  三级联动 下拉框 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class _Default : System.Web.UI.Page { private MyDBDataContext _Context = new MyDBD

web测试点整理(四) -- 添加/修改/删除功能

声明:是参考了很多他人的文章以及自己的一些经验做了总结,因为时间久远,也没有留下当时的参考链接,如果涉及引用别人的内容,请留言说明,谢谢 添加.修改 特殊键 是否支持Tab键 是否支持回车键 提示信息 不符合要求的地方是否有错误提示 唯一性 字段唯一的,是否可以重复添加,添加后是否能修改为已存在的字段(字段包括区分大小写以及在输入的内容前后输入空格,保存后,数据是否真的插入到数据库中,注意保存后数据的正确性) 数据正确性: 对编辑页的每个编辑项进行修改,点击保存,是否可以保存成功,检查相关联的数

关于XML的读取,添加,修改,删除

----- 转载CSDN,觉得作者写挺好,记录这里当做笔记学习,且对应方法msdn查了一下,添加了注释更加透彻明白,有什么不对,请留言指教: 其中, XmlNode 继承于 IConeable,IEnumerable,IXPathNavigable; XmlDocument 继承于XmlNode; XmlElement 继承于XmlLinkedNode,而XmlLinkedNode 继承于XmlNode; XML文档 1 <?xml version='1.0' encoding='gb2312'

Oracle的学习二:表管理(数据类型、创建/修改表、添加/修改/删除数据、数据查询)

1.Oracle表的管理 表名和列名的命名规则: 必须以字母开头: 长度不能超过30个字符: 不能使用oracle的保留字: 只能使用如下字符:A-Z, a-z, 0-9, $, # 等. Oracle支持的数据类型: 字符型 char 定长 最大2000个字符 char(10)----'小韩' 前四个字符放'小韩',后添加6个空格补全.(查询效率高) varchar2(20) 变长 最大4000个字符 vachar2(10)----'小韩' oracle分配四个字符,这样可以节省空间. clo

C# 添加,修改,删除文件夹/文件集合

C#追加文件 StreamWriter sw = File.AppendText(Server.MapPath(".")+"\\myText.txt"); sw.WriteLine("追逐理想"); sw.WriteLine("kzlll"); sw.WriteLine(".NET笔记"); sw.Flush(); sw.Close(); C#拷贝文件 string OrignFile,NewFile; O