Application类上加@EnableScheduling
注解。
DynamicTask类代码:
@RestController
@RequestMapping("/task")
public class DynamicTask {
private static String DEFAULT_CRON = "0/5 * * * * ?";
@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(DEFAULT_CRON));
System.out.println("start cron");
return "startCron";
}
@RequestMapping("/stopCron")
public String stopCron() {
if (future != null) {
future.cancel(true);
}
System.out.println("stop cron");
return "stopCron";
}
@RequestMapping("/changeCron10")
public String changeCron10() {
stopCron();// 先停止,在开启.
future = threadPoolTaskScheduler.schedule(new MyRunnable(), new CronTrigger("*/10 * * * * *"));
System.out.println("changeCron10");
return "changeCron10";
}
private class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println("run ," + new Date());
}
}
}
启动项目,一开始是没有计划任务的。
http://localhost:8080/task/startCron
启动任务,5秒执行一次
http://localhost:8080/task/stopCron
停止任务,不再执行了
http://localhost:8080/task/changeCron10
修改任务,10秒执行一次
其他
如何实现分布式呢
手动控制schedule开关确实很不错,比修改配置文件,再重启方便许多。
本来想集成到项目中,但是突然发现个问题,分布式情况下,如何让开关控制到每个项目?
更多推荐
springboot实现schedule任务的动态开关和控制
发布评论