选项1:使用后处理器
为应停止调度的bean
提供
ScheduledAnnotationBeanPostProcessor并显式调用
postProcessBeforeDestruction(Objectbean, String beanName)。
选项2:维护目标豆与其未来的映射
private final Map<Object, ScheduledFuture<?>> scheduledTasks = new IdentityHashMap<>();@Scheduled(fixedRate = 2000)public void fixedRateJob() { System.out.println("Something to be done every 2 secs");}@Beanpublic TaskScheduler poolScheduler() { return new CustomTaskScheduler();}class CustomTaskScheduler extends ThreadPoolTaskScheduler { @Override public ScheduledFuture<?> scheduleAtFixedRate(Runnable task, long period) { ScheduledFuture<?> future = super.scheduleAtFixedRate(task, period); ScheduledMethodRunnable runnable = (ScheduledMethodRunnable) task; scheduledTasks.put(runnable.getTarget(), future); return future; } @Override public ScheduledFuture<?> scheduleAtFixedRate(Runnable task, Date startTime, long period) { ScheduledFuture<?> future = super.scheduleAtFixedRate(task, startTime, period); ScheduledMethodRunnable runnable = (ScheduledMethodRunnable) task; scheduledTasks.put(runnable.getTarget(), future); return future; }}当必须停止对bean的调度时,可以查找该映射以获取对应的映射
Future并显式取消它。



