Stop the @Scheduled scheduled task

@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
                postProcessor.postProcessBeforeDestruction(runnable.getTarget(), methodName);
            }
        });
    }
}

Guess you like

Origin blog.csdn.net/qq_49641620/article/details/128188345
Recommended