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

方便演示,任务就是每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

 import com.xiaostudy.shiro_test1.task.TaskRunnable;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.scheduling.support.CronTrigger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody; import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ScheduledFuture;
import java.util.stream.Collectors; @Controller
@RequestMapping("/task")
public class TaskController { private Map<String, ScheduledFuture<?>> taskMap = new HashMap<>(); @Autowired
private ThreadPoolTaskScheduler threadPoolTaskScheduler; @RequestMapping("addTask")
@ResponseBody
public boolean addTask(String name){
String zhangsanCron = "*/3 * * * * ?";
return add(name, zhangsanCron);
} @RequestMapping("stopTask")
@ResponseBody
public boolean stopTask(String name){
return stop(name);
} @RequestMapping("listTask")
@ResponseBody
public String listTask(){
return taskMap.keySet().stream().map(name -> name).collect(Collectors.joining(","));
} private boolean add(String name, String cron) {
if(null != taskMap.get(name)) {
return false;
}
ScheduledFuture<?> schedule = threadPoolTaskScheduler.schedule(new TaskRunnable(name), new CronTrigger(cron));
taskMap.put(name, schedule);
return true;
} private boolean stop(String name) {
if(null == taskMap.get(name)) {
return false;
}
ScheduledFuture<?> scheduledFuture = taskMap.get(name);
scheduledFuture.cancel(true);
taskMap.remove(name);
return true;
}
}

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保证其唯一性

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

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

  1. SpringBoot定时任务升级篇(动态添加修改删除定时任务)

    需求缘起:在发布了<Spring Boot定时任务升级篇>之后得到不少反馈,其中有一个反馈就是如何动态添加修改删除定时任务?那么我们一起看看具体怎么实现,先看下本节大纲: (1)思路说明: ...

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

    第三章 建议学习时间8小时      总项目预计10章 学习方式:详细阅读,并手动实现相关代码(如果没有node和vue基础,请学习前面的vue和node基础博客[共10章] 演示地址:后台:demo ...

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

    [转]C#添加修改删除文件文件夹大全 C#添加修改删除文件文件夹大全 StreamWriter sw = File.AppendText(Server.MapPath(".")+& ...

  4. JavaWeb_day03_员工信息添加修改删除

    day03员工的添加,修改,删除 修改功能 思路 : 点击修改员工数据之后,跳转到单行文本,查询要修改的员工id的全部信息,主键id设置为readonly,其余的都可以修改, 修改之后,提交按钮,提交 ...

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

    Web  三级联动 下拉框 using System; using System.Collections.Generic; using System.Linq; using System.Web; u ...

  6. springboot动态定时任务

    SpringBoot设置动态定时任务 一.说明 1.在我们日常的开发中,很多时候,定时任务都不是写死的,而是写到数据库中,从而实现定时任务的动态配置. 2.定时任务执行时间可根据数据库中某个设置字段动 ...

  7. ORM简介 单表添加修改删除表记录

    ---------------------------------------------------------------目标既定,在学习和实践过程中无论遇到什么困难.曲折都不灰心丧气,不轻易改变 ...

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

    1.Oracle表的管理 表名和列名的命名规则: 必须以字母开头: 长度不能超过30个字符: 不能使用oracle的保留字: 只能使用如下字符:A-Z, a-z, 0-9, $, # 等. Oracl ...

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

    C#追加文件 StreamWriter sw = File.AppendText(Server.MapPath(".")+"\\myText.txt"); sw ...

随机推荐

  1. BigDecimal保留小数

    public class test1_format { public static void main(String[] args) { BigDecimal decimal = new BigDec ...

  2. 对MVVM的理解

    MVVM是Model-view-ViewMoudel的缩写 Model代表数据类型,也可以在Model中定义数据修改和操作的业务逻辑: View代表UI组件,负责将数据模型转化为UI展现出来: Vie ...

  3. vue基于iview树状表格,封装完善

    先安装iview后在使用 完善按钮不显示问题 ,当children过多时,点击不动问题等 封装 <template> <div :style="{width:tableWi ...

  4. [RN] React Native 分享弹窗 ShareAlertDialog

    React Native 分享弹窗 ShareAlertDialog ShareAlertDialog.js文件 /** * 分享弹窗 */ import React, {Component} fro ...

  5. CF732D Exams 题解

    CF732D Exams 题目描述 Vasiliy has an exam period which will continue for \(n\) days. He has to pass exam ...

  6. js中的逗号运算符

    逗号运算符 逗号运算符是二元运算符,它的操作数可以是任意类型.它首先计算左操作数,然后计算右操作数,最后返回右操作数的值,用逗号运算符可以在一条语句中执行多个运算 作用: 1.在一条语句中从左到右执行 ...

  7. 牛客网 牛客练习赛4 A.Laptop-二维偏序+离散化+树状数组

    A.Laptop 链接:https://ac.nowcoder.com/acm/contest/16/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其 ...

  8. C++ STL(标准模板库)的学习了解

    C++ STL(标准模板库)是一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量.链表.队列.栈. C++ 标准模板库的核心包括以 ...

  9. oracle 如何通过分组计数查出重复数据?

      1.情景展示 现在,机构表数据中机构名称有重复数据,如何筛选出来? 2.分析 第一步:统计是否存在重复数据. 方式一: 方式二: 说明表中确实存在重复数据 第二步:统计重复次数及机构名称. 需要通 ...

  10. 后台接收参数报错 Required String parameter 'id' is not present

    来自:https://blog.csdn.net/qq_15238647/article/details/81539287 关于ajax请求spring后台出现 Required String par ...