我已经使用Spring Framework的@Scheduled
注释创建了一个简单的计划任务。
@Scheduled(fixedRate = 2000)
public void doSomething() {}
现在,当不再需要时,我想停止此任务。
我知道在此方法开始时可能有一种方法可以检查一个条件标志,但这不会停止执行此方法。
Spring提供了什么来停止@Scheduled
任务?
为应停止调度的bean
提供ScheduledAnnotationBeanPostProcessor
并显式调用postProcessBeforeDestruction(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提供了什么来停止任务吗?
我有一个简单的计划任务,它是使用@计划注释创建的。类似这样的东西- 我还有一个蓝绿色升级场景,在这个场景中,这个计划任务可能会在蓝色和绿色集群中运行。鉴于这个计划任务修改了数据库,其中一个节点可能会覆盖来自另一个节点的数据——或者最坏情况下的竞争条件。 我想暂停绿色集群上所有计划的任务,直到它准备好接受流量。我已经有了代码来监听应用程序状态的变化。 我探索了几个选择- 只需在任务开始时添加一个布尔
问题内容: 我正在使用类,并且正在使用其schedule方法执行某些任务,但是在执行了6次之后,我必须停止其任务。 我该怎么办? 问题答案: 在某个地方保留对计时器的引用,并使用: 停止所做的一切。您可以将此代码放在正在执行的任务中,以计算您经过的次数,例如
问题内容: 我一直在研究如何使用Java 8和spring在运行时更改作业的频率。这个问题非常有用,但是并不能完全解决我的问题。 现在,我可以配置下次上班的日期。但是,如果将延迟设置为1年,那么我需要等待1年才能考虑新配置。 我的想法是,如果更改了配置值(因此来自另一个类),则停止计划的任务。然后重新计算下一次应执行的任务。也许有更简单的方法可以做到这一点。 这是我到目前为止的代码。 这就是我想做
我正在使用ScheduledExecutorService并对其进行初始化(ScheduledExecutorService scheduledThreadPool=Executors.NewScheduledThreadPool(20);)这样我就不会每次都创建新线程。然后,我使用计划“executorService.schedule(new Runnable(),20,timeUnit.sec
本文向大家介绍详解在Spring3中使用注解(@Scheduled)创建计划任务,包括了详解在Spring3中使用注解(@Scheduled)创建计划任务的使用技巧和注意事项,需要的朋友参考一下 Spring3中加强了注解的使用,其中计划任务也得到了增强,现在创建一个计划任务只需要两步就完成了: 创建一个Java类,添加一个无参无返回值的方法,在方法上用@Scheduled注解修饰一下; 在Spr