1. 程式人生 > >springboot 定時任務(動態新增修改 )

springboot 定時任務(動態新增修改 )

 考慮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