【发布时间】:2019-07-29 22:37:59
【问题描述】:
我在 Spring 中使用 CronTrigger 来安排每隔一小时执行一些任务。第一次调度发生在一小时后。而我希望第一次调度立即发生。
@Autowired
@Qualifier("myScheduler")
private ThreadPoolTaskScheduler scheduler;
@Autowired @Lazy
private ScheduledService scheduledService; // implements Runnable
Trigger trigger = new CronTrigger("0 0 * * * *");
Date date = trigger.nextExecutionTime(new SimpleTriggerContext());
log.info("Next scheduled time for tasks - [" + date.toString() + "]");
scheduler.schedule(scheduledService, trigger);
如何立即触发第一次执行而不是等待一个小时?随后的触发器应每隔一小时工作一次。
【问题讨论】:
-
这个answer怎么样?
-
至于您的示例代码 - crontrigger 将使用给定上下文中的“LastCompletionTime”来计算下一个触发时间。如果没有给出那个时间,就像你的情况一样,那么最后完成时间默认为“现在”,并且“下一个”时间将在“最后完成时间”之后至少一秒开始,所以在“现在”之后。这就是你得到你所得到的。
-
@M.Prokhorov 你能提供示例代码吗?
-
我不会提供任何示例代码,除非您指的是 Spring 的代码。那是在他们的 GitHub 页面上。
-
@M.Prokhorov hrat 答案代码使用一个常量值,但我必须使用 db 中的表达式,这可以通过 cronJob 但在启动时遇到问题。