springboot 定時任務(動態新增修改 )
阿新 • • 發佈:2019-01-10
考慮Scheduled 註解 動態改變cron 表示式來達到修改任務的執行時間 (例如現在有個定時任務1分鐘執行一次 ,當我通過呼叫介面時 會修改為定時任務 5分鐘執行)無奈 cron 的表示式的值只能為常量
實現方式一 未實現動態新增
實現 SchedulingConfigurer 介面 重寫configureTasks 方法實現新增自定義 定時任務功能 其中CronTrigger 構造新增 cron變數實現變化
方式二 使用 ThreadPoolTaskScheduler 類 可實現動態新增刪除功能
@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 {
@Override
public void run() {
System.out.println("DynamicTask.MyRunnable.run()," + new Date());
}
}
}'
原文連結:https://www.jianshu.com/p/18327d0f3dbe