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秒执行一次