Java停止计划的任务(如果花费的时间超过特定时间)

时间:2019-01-02 18:29:57

标签: java spring-boot kotlin

我有一个计划的作业,该作业每100秒运行一次。有时执行此方法会花费很多时间(可以,并且没有问题)。在这种情况下,运行方法的结果对我而言并不重要,我想将作业重新计划为下一个100秒。

强制特定时间后终止正在运行的作业(foo)的最佳方法是什么?

我的预定代码如下:

return

谢谢。

2 个答案:

答案 0 :(得分:1)

尝试使用固定费率而不是固定延迟

这是来自的文章 伞菌Spring中的@Scheduled注释。来自https://www.baeldung.com/spring-scheduled-tasks

的引荐
  1. 以固定的速度安排任务

    @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)