当前位置: 首页 > 知识库问答 >
问题:

如何停止使用@ductived注释启动的计划任务?

祝宾白
2023-03-14

我使用Spring Framework的@ductived注释创建了一个简单的计划任务。

 @Scheduled(fixedRate = 2000)
 public void doSomething() {}

我知道可以有一个选择在这个方法开始时检查一个条件标志,但这不会停止这个方法的执行

Spring提供了什么来停止@dischedule任务吗?

共有1个答案

荀裕
2023-03-14

为应该停止调度的bean提供ScheduleDannotationBeanPostProcessor并显式调用PostProcessBeforeDestrocy(Object bean,String beanName)

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, long period) {
        ScheduledFuture<?> future = super.scheduleAtFixedRate(task, startTime, period);

        ScheduledMethodRunnable runnable = (ScheduledMethodRunnable) task;
        scheduledTasks.put(runnable.getTarget(), future);

        return future;
    }
}

当必须停止bean的调度时,您可以查找映射以获取对应的future并显式取消它。

 类似资料:
  • 问题内容: 我已经使用Spring Framework的注释创建了一个简单的计划任务。 现在,当不再需要时,我想停止此任务。 我知道在此方法开始时可能有一种方法可以检查一个条件标志,但这不会停止执行此方法。 Spring提供了什么来停止任务? 问题答案: 选项1:使用后处理器 为应停止调度的bean 提供并显式调用。 选项2:维护目标豆与其未来的映射 当必须停止对bean的调度时,可以查找该映射以

  • 我有一个简单的计划任务,它是使用@计划注释创建的。类似这样的东西- 我还有一个蓝绿色升级场景,在这个场景中,这个计划任务可能会在蓝色和绿色集群中运行。鉴于这个计划任务修改了数据库,其中一个节点可能会覆盖来自另一个节点的数据——或者最坏情况下的竞争条件。 我想暂停绿色集群上所有计划的任务,直到它准备好接受流量。我已经有了代码来监听应用程序状态的变化。 我探索了几个选择- 只需在任务开始时添加一个布尔

  • 问题内容: 我正在使用类,并且正在使用其schedule方法执行某些任务,但是在执行了6次之后,我必须停止其任务。 我该怎么办? 问题答案: 在某个地方保留对计时器的引用,并使用: 停止所做的一切。您可以将此代码放在正在执行的任务中,以计算您经过的次数,例如

  • 我正在使用ScheduledExecutorService并对其进行初始化(ScheduledExecutorService scheduledThreadPool=Executors.NewScheduledThreadPool(20);)这样我就不会每次都创建新线程。然后,我使用计划“executorService.schedule(new Runnable(),20,timeUnit.sec

  • 本文向大家介绍如何使用PowerShell启动任务计划程序的特定任务?,包括了如何使用PowerShell启动任务计划程序的特定任务?的使用技巧和注意事项,需要的朋友参考一下 要使用PowerShell启动任务计划程序的特定任务,我们需要使用Start-ScheduledTask 命令。 当我们运行上面的命令时,我们需要提供任务名称。 例如, 当您检查以上任务状态时, 示例 输出: 要在远程计算机

  • 问题内容: 如果我在命令行中键入,则可以看到以下行: 要 启动 此cronjob,我需要使用命令编辑文件,删除该行开头的注释字符,保存已编辑的文件,然后退出编辑器。 要 停止 此cronjob,请执行相同的步骤,但在该行的开头添加注释字符。 我想使用 PHP脚本 实现完全相同的效果,而不是手动编辑文件。 问题答案: 我进行了一些研究,并在论坛中找到以下消息: 将EDITOR环境变量设置为php脚本