admin管理员组

文章数量:1794759

springboot实现schedule任务的动态开关和控制

springboot实现schedule任务的动态开关和控制

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()); } } }

启动项目,一开始是没有计划任务的。

localhost:8080/task/startCron 启动任务,5秒执行一次 localhost:8080/task/stopCron 停止任务,不再执行了 localhost:8080/task/changeCron10 修改任务,10秒执行一次

其他 如何实现分布式呢

手动控制schedule开关确实很不错,比修改配置文件,再重启方便许多。 本来想集成到项目中,但是突然发现个问题,分布式情况下,如何让开关控制到每个项目?

本文标签: 动态SpringBootschedule