如何动态添加修改删除定时任务
如何動態添加修改刪除定時任務
(1)思路說明;
(a)首先這里我們需要重新認識一個類ThreadPoolTaskScheduler:線程池任務調度類,能夠開啟線程池進行任務調度。
(b)ThreadPoolTaskScheduler.schedule()方法會創建一個定時計劃ScheduledFuture,在這個方法需要添加兩個參數,Runnable(線程接口類) 和CronTrigger(定時任務觸發器)
(c)在ScheduledFuture中有一個cancel可以停止定時任務。
(2)代碼解析;
根據以上的思路分析,我們很容易就知道如何進行編碼了,先提供代碼如下: package com.kfit.task;import java.util.Date; import java.util.concurrent.ScheduledFuture; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; import org.springframework.scheduling.support.CronTrigger; import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /*** @author Angel --守護天使* @version v.0.1* @date 2017年4月6日*/@RestController @Component public class DynamicTask { @Autowired private ThreadPoolTaskScheduler threadPoolTaskScheduler; private ScheduledFuture<?> future; @Bean public ThreadPoolTaskScheduler threadPoolTaskScheduler() {return new ThreadPoolTaskScheduler(); } @RequestMapping("/startCron") public String startCron() {future = threadPoolTaskScheduler.schedule(new MyRunnable(), new CronTrigger("0/5 * * * * *"));System.out.println("DynamicTask.startCron()");return "startCron"; } @RequestMapping("/stopCron") public String stopCron() {if (future != null) {future.cancel(true);}System.out.println("DynamicTask.stopCron()");return "stopCron"; }@RequestMapping("/changeCron10") public String startCron10() {stopCron();// 先停止,在開啟.future = threadPoolTaskScheduler.schedule(new MyRunnable(), new CronTrigger("*/10 * * * * *"));System.out.println("DynamicTask.startCron10()");return "changeCron10"; }private class MyRunnable implements Runnable {@Overridepublic void run() {System.out.println("DynamicTask.MyRunnable.run()," + new Date());} } }小結:
(a)我們首先了一個類DynamicTask;
(b)定義了兩個變量,threadPoolTaskScheduler和future 其中future是treadPoolTaskScheduler執行方法schedule的返回值,主要用于定時任務的停止。
(c)編寫啟動定時器的方法startCron();
(d)編寫停止方法stopCron(),這里編碼的時候,需要注意下需要判斷下future為null的時候,不然就很容易拋出NullPointerException;
(e)編寫修改定時任務執行周期方法changeCron10(),這里的原理就是關閉之前的定時器,創新在創建一個新的定時器。
復制代碼
(3)修改定時任務執行周期特別說明;
注意ThreadPoolTaskScheduler中的schedule()第二個參數支持Trigger:
ThreadPoolTaskScheduler.schedule(Runnable arg0, Trigger arg1)
那么我們就可以自己定義一個Trigger,然后動態進行修改了,這里提供核心的代碼如下:
復制代碼
private String cronStr = "*/5 * * * * *";
總結
以上是生活随笔為你收集整理的如何动态添加修改删除定时任务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: lua脚本在redis集群中执行报错--
- 下一篇: navicate 导出批量插入语句