这里只演示添加和删除任务的,因为修改就是删除任务再添加而已。
方便演示,任务就是每3秒打印
1、没有任务
后台
2、添加一个任务
3、再添加一个任务
4、删除一个任务
5、再添加一个任务
6、代码
运行任务线程的代码TaskRunnable.java
importcom.xiaostudy.shiro_test1.utils.DateUtils;public class TaskRunnable implementsRunnable {privateString name;publicTaskRunnable(String name) {this.name =name;
}
@Overridepublic voidrun() {
System.out.println(name+ "---动态定时任务运行---" +DateUtils.getDateTime());
}
}
TaskController.java
1 importcom.xiaostudy.shiro_test1.task.TaskRunnable;2 importorg.springframework.beans.factory.annotation.Autowired;3 importorg.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;4 importorg.springframework.scheduling.support.CronTrigger;5 importorg.springframework.stereotype.Controller;6 importorg.springframework.web.bind.annotation.RequestMapping;7 importorg.springframework.web.bind.annotation.ResponseBody;8
9 importjava.util.HashMap;10 importjava.util.Map;11 importjava.util.concurrent.ScheduledFuture;12 importjava.util.stream.Collectors;13
14 @Controller15 @RequestMapping("/task")16 public classTaskController {17
18 private Map> taskMap = new HashMap<>();19
20 @Autowired21 privateThreadPoolTaskScheduler threadPoolTaskScheduler;22
23 @RequestMapping("addTask")24 @ResponseBody25 public booleanaddTask(String name){26 String zhangsanCron = "*/3 * * * * ?";27 returnadd(name, zhangsanCron);28 }29
30 @RequestMapping("stopTask")31 @ResponseBody32 public booleanstopTask(String name){33 returnstop(name);34 }35
36 @RequestMapping("listTask")37 @ResponseBody38 publicString listTask(){39 return taskMap.keySet().stream().map(name -> name).collect(Collectors.joining(","));40 }41
42 private booleanadd(String name, String cron) {43 if(null !=taskMap.get(name)) {44 return false;45 }46 ScheduledFuture> schedule = threadPoolTaskScheduler.schedule(new TaskRunnable(name), newCronTrigger(cron));47 taskMap.put(name, schedule);48 return true;49 }50
51 private booleanstop(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>装起来,key可以用id保证其唯一性
小白刚刚接触,只有简单的实现,没有考虑数据量大等问题。仅做记录