
本文内容参考公众号 "Java技术栈"
通过@Scheduled开启的定时任务,当需要关闭的时候,可以通过自定义任务调度的方式进行关闭
首先需要添加一个配置类来替代原有的自动配置类
@Data
@Component
public class ThreadPoolTaskSchedulerComponent extends ThreadPoolTaskScheduler {
private Map
开启一个定时任务
@Component
public class AutoTask {
@Scheduled(cron = "*/3 * * * * *")
public void printTask() {
System.out.println("执行任务"+ LocalDateTime.now().toLocalTime());
}
}
本文通过controller来控制关闭定时任务
@RestController
public class StopController {
@Autowired
StopTask stopTask;
@GetMapping("stop")
void stopTaskController(){
stopTask.stopTask();
}
}
最后实现关闭的 *** 作
@Service
public class StopTask {
@Autowired
ThreadPoolTaskSchedulerComponent component;
@Autowired
AutoTask autoTask;
public void stopTask(){
component.getScheduledTasks().get(autoTask).cancel(true);
}
}
需要再次开启的话,添加一个service
public void startTask(){
boolean cancelled = component.getScheduledTasks().get(autoTask).isCancelled();
if(cancelled){
ScheduledMethodRunnable runnable = new ScheduledMethodRunnable(autoTask, ReflectionUtils.findMethod(AutoTask.class, "printTask"));
component.schedule(runnable, new CronTrigger("*/1 * * * * *"));
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)