使用Spring Trigger重新调度执行一次的任务

时间:2016-11-21 20:29:33

标签: java spring spring-boot spring-batch spring-scheduled

我有一个要求,我需要安排一个只执行一次的任务(来自UI)。完成后,我应该能够再次(从UI)重新安排相同的任务。

我知道@Schedule不会在这里工作,因为我只需执行一次。因此,在进一步搜索之后,我能够使用具有Runnable和Date的TaskScheduler以及@Async来安排任务在特定时间执行一次。但是我无法重新安排。

看起来使用石英可能是可能的,但我还没有完成它。

是否可以使用Spring Trigger实现我的要求。我只能看到触发器接口CronTrigger和PeriodicTrigger的两个实现。

请建议任何可能的方法。 包括最初的一段代码会有所帮助。

1 个答案:

答案 0 :(得分:0)

我看到的最简单的方法是在Spring bean中创建一个定期调度的“触发器”方法,该方法检查某个条件并仅在满足条件时执行“真实”操作(例如,您在UI中输入的时间)已经过去,工作尚未开始):

@Scheduled(fixedDelay = 5000)
public void trigger() {
  if(condition){
    //... do the action
  }
}

这需要一些持久性来存储“作业元数据”,比如执行日期和作业的当前状态,但这似乎比使用线程或包含石英仅仅为这一个用例“更轻”。