美文网首页
动态取消@Scheduled定时任务

动态取消@Scheduled定时任务

作者: 炒面Z | 来源:发表于2022-04-02 15:30 被阅读0次

    目的: 终止 @Scheduled 定时任务

    @Slf4j
    @Component
    public class ScheduleUtils {
    
        /**
         * 得到BeanPostProcessor,用于终止定时任务
         */
        @Autowired
        private ScheduledAnnotationBeanPostProcessor postProcessor;
    
        /**
         * 根据 methodName 终止定时任务
         *
         * @param methodName
         */
        public void cancelScheduledTask(String methodName) {
            Set<ScheduledTask> tasks = postProcessor.getScheduledTasks();
    
            // 从所有定时任务中找出 methodName 并取消掉
            tasks.stream().forEach(task -> {
                Task t = task.getTask();
                ScheduledMethodRunnable runnable = (ScheduledMethodRunnable) t.getRunnable();
                if (Objects.equals(runnable.getMethod().getName(), methodName)) {
                    // 调用postProcessBeforeDestruction()方法,将task移除并cancel
                    postProcessor.postProcessBeforeDestruction(runnable.getTarget(), methodName);
                    log.error("定时任务[{}],被终止", methodName);
                }
            });
        }
    }
    

    相关文章

      网友评论

          本文标题:动态取消@Scheduled定时任务

          本文链接:https://www.haomeiwen.com/subject/rrbtsrtx.html