【问题标题】:Re-scheduling a task that executes once using Spring Trigger使用 Spring Trigger 重新安排执行一次的任务
【发布时间】:2017-04-05 08:33:57
【问题描述】:

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

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

看起来使用石英可能是可能的,但我还没有经历过。

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

请提出任何可能的方法。 包含初始代码会很有帮助。

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 我不知道@Schedule 将如何在内部工作,但它不会全天每5 秒对trigger() 方法进行不必要的调用,即使条件可能不满足?跨度>
    • 是的,trigger() 方法将每 5 秒调用一次。
    猜你喜欢
    • 2019-06-06
    • 1970-01-01
    • 2016-06-17
    • 2017-01-01
    • 2017-02-17
    • 2013-01-12
    • 2010-10-12
    • 2019-11-25
    • 2021-12-18
    相关资源
    最近更新 更多