码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2019-10-13 00:33:00      阅读:543      评论:0      收藏:0      [点我收藏+]

标签:adp   body   小白   开始   autowired   his   remove   数据库   boot   

 

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

方便演示,任务就是每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保证其唯一性

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

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

标签:adp   body   小白   开始   autowired   his   remove   数据库   boot   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!