java – 如何停止使用@Scheduled注释启动的计划任务?
发布时间:2020-12-15 07:38:46 所属栏目:Java 来源:网络整理
导读:我使用 Spring Framework的 @Scheduled 注释创建了一个简单的计划任务. @Scheduled(fixedRate = 2000) public void doSomething() {} 现在我想在不再需要时停止这项任务. 我知道在这个方法的开头可以有一个替代方法来检查一个条件标志,但是这不会停止执行这
我使用
Spring Framework的
@Scheduled 注释创建了一个简单的计划任务.
@Scheduled(fixedRate = 2000) public void doSomething() {} 现在我想在不再需要时停止这项任务. 我知道在这个方法的开头可以有一个替代方法来检查一个条件标志,但是这不会停止执行这个方法. 是否有Spring提供什么来阻止@Scheduled任务? 解决方法
选项1:使用后处理器
为应该停止调度的bean提供 选项2:将目标bean的映射维护到其Future private final Map<Object,ScheduledFuture<?>> scheduledTasks = new IdentityHashMap<>(); @Scheduled(fixedRate = 2000) public void fixedRateJob() { System.out.println("Something to be done every 2 secs"); } @Bean public 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,startTime,future); return future; } } 当必须停止bean的调度时,您可以查找映射以获取相应的 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |