【问题标题】:How to execute a job once at specific time in a specific timezone using Quartz如何使用 Quartz 在特定时区的特定时间执行一次作业
【发布时间】:2016-07-11 14:06:40
【问题描述】:

我正在尝试在使用 Quartz 的用户的时区中的特定时间设置一次作业的执行。 现在,开箱即用,我可以告诉调度程序在时区执行任何操作的唯一方法是通过cronSchedule。粗略地说,我可以潜在地将日期时间转换为 cron 表达式,然后在第一次成功执行后立即停止该触发器,但 闻起来

注意:好像SimpleSchedule 不允许我设置时区。

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

我最好的选择是什么?

谢谢,

【问题讨论】:

标签: scheduled-tasks quartz-scheduler


【解决方案1】:

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

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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-10
    • 1970-01-01
    相关资源
    最近更新 更多