我有一个计划的作业,该作业每100秒运行一次。有时执行此方法会花费很多时间(可以,并且没有问题)。在这种情况下,运行方法的结果对我而言并不重要,我想将作业重新计划为下一个100秒。
强制特定时间后终止正在运行的作业(foo
)的最佳方法是什么?
我的预定代码如下:
return
谢谢。
答案 0 :(得分:1)
尝试使用固定费率而不是固定延迟
这是来自的文章 伞菌Spring中的@Scheduled注释。来自https://www.baeldung.com/spring-scheduled-tasks
的引荐以固定的速度安排任务
@Scheduled(fixedRate = 1000) 公共无效scheduleFixedRateTask(){ System.out.println( “固定费率任务-“ + System.currentTimeMillis()/ 1000); }
请注意,任务执行的开始不等待上一次执行的完成。
每次执行任务独立时都应使用此选项。
答案 1 :(得分:0)
您可以使用org.springframework.scheduling.TaskScheduler
而非基于注释的方法来实现自定义任务计划程序。
private final TaskScheduler scheduler;
@Autowired
public SchedulingManager(TaskScheduler scheduler) {
this.scheduler = scheduler;
}
在这种情况下,
ScheduledFuture scheduledeFuture = scheduler.schedule(()->{
....You job goes here..
}, new CronTrigger("*/100 * * * * *"));
您可以跟踪预定的将来,以确保它运行了预期的最大时间。
scheduledeFuture.get(100,TimeUnit.SECONDS)