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