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


猜你喜欢

转载自blog.csdn.net/a15835774652/article/details/79584515