@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);
}
});
}
}
停止@Scheduled定时任务
于 2022-12-05 16:04:41 首次发布