是否可以在准确指定的时间只安排一次 Spring 服务方法?例如,当前时间是下午 2 点,但当我按下操作按钮时,我希望我的服务方法在晚上 8 点开始。我熟悉 @Scheduled 注释,但我不确定如何编写不定期运行的 cron 表达式。这个 @Scheduled(cron = "0 0 20 * * ?")
每天晚上 8 点触发。
有什么建议么?
原文由 shx 发布,翻译遵循 CC BY-SA 4.0 许可协议
是否可以在准确指定的时间只安排一次 Spring 服务方法?例如,当前时间是下午 2 点,但当我按下操作按钮时,我希望我的服务方法在晚上 8 点开始。我熟悉 @Scheduled 注释,但我不确定如何编写不定期运行的 cron 表达式。这个 @Scheduled(cron = "0 0 20 * * ?")
每天晚上 8 点触发。
有什么建议么?
原文由 shx 发布,翻译遵循 CC BY-SA 4.0 许可协议
死人的解决办法:
@Scheduled(initialDelay = 1000 * 30, fixedDelay=Long.MAX_VALUE)
在它再次开火之前你就已经死了。
原文由 Rick Ahlander 发布,翻译遵循 CC BY-SA 4.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
您可以使用 Spring 的 TaskScheduler 实现之一。我在下面提供了一个不需要太多配置的示例(包装单线程计划执行程序的 ConcurrentTaskScheduler)。
阅读有关 任务执行和调度 的更多信息
简单的工作示例:
注意:
更新- 取消计划任务
TaskScheduler 的 schedule 方法返回一个 ScheduledFuture ,它是一个 _可以取消的延迟结果承载操作_。
因此,为了取消它,您需要保留计划任务的句柄(即保留 ScheduledFuture 返回对象)。
更改上面的代码以取消任务: