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

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

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

1、没有任务

c630dbe6d89835ae798147b73c8b728f.png

后台

1ee04b48c477cbf9fe9cce2e2be09f5e.png

2、添加一个任务

2759e9e398d28b9fa9b0597ac2fbc439.png

53ed7dbaeaf8805547ddc4d7dd8e4162.png

df4c6f465f11bc2a85b0d9dea852c884.png

3、再添加一个任务

f6d5d0d5b1a80f84e63b5e2bbd332629.png

e9b26d970bb952432c2c8b817eb4a290.png

1502132a7f6d094a0970aaa64c04780e.png

4、删除一个任务

9c3389737604177e4c735c94846fe19e.png

d19a78a96e74fb29948047af36a89a60.png

9ea069af92849f1bebb0e6d12581282f.png

5、再添加一个任务

d398fbdaccb46c827104db8daebb9e45.png

af61a4196a93defe3122a8382ea212bc.png

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值