如何使用Quartz在特定时区的特定时间执行一次作业



我正试图使用Quartz在用户时区的特定时间设置一次作业执行。现在,我可以告诉调度器在时区中执行任何事情的唯一方法是通过cronSchedule。当然,我可能会将datetime转换为cron表达式,然后在第一次成功执行后立即停止该触发器,但闻起来

注意:似乎SimpleSchedule不允许我设置时区。

另一种选择是将用户提供的所有时间转换为调度器的时区,然后用该时间创建触发器。但是,这是灾难的处方。

我在这里的最佳选择是什么?

谢谢,

您可以用所需的时区更新现有触发器并重新安排作业:

http://quartz-scheduler.org/documentation/quartz-2.x/cookbook/UpdateTrigger

  // retrieve the trigger
  Trigger oldTrigger = sched.getTrigger(triggerKey("oldTrigger", "group1");
  // obtain a builder that would produce the trigger
  TriggerBuilder tb = oldTrigger.getTriggerBuilder();
  // update the schedule associated with the builder, and build the new trigger
  // (other builder methods could be called, to change the trigger in any desired way)
  Trigger newTrigger = tb.withSchedule(simpleSchedule()
 .withIntervalInSeconds(10)
 .withRepeatCount(10)
 .inTimeZone(TimeZone.getTimeZone("America/Los_Angeles"))
 .build();
 sched.rescheduleJob(oldTrigger.getKey(), newTrigger);

最新更新