将Quartz代码迁移到2.2.x.

时间:2014-01-09 16:25:28

标签: java quartz-scheduler

我一直在努力将Quartz代码从1.8.6更改为2.x.x.您可能知道,在Quartz 2中,有很多API更改。我正在努力解决的一个问题是安排工作。以前,代码看起来像这样:

private JobSchedule scheduleExistingJob(JobSchedule schedule) throws SchedulerException
{
  JobInfo jobInfo = schedule.getJobInfo();

  Trigger trigger = QuartzUtils.createTriggerFromJobSchedule(schedule);

  trigger.setJobName(jobInfo.getName());
  trigger.setJobGroup(jobInfo.getGroup());
  DateTime nextRunDateTime = new DateTime(m_scheduler.scheduleJob(trigger));
  JobSchedule newSched = updateScheduleNextRunDateTime(schedule, nextRunDateTime);
  return newSched;
}

使用此旧代码时,会出现两个语法错误:一个位于trigger.setJobName(jobInfo.getName());,另一个位于trigger.setJobGroup(jobInfo.getGroup());

两人都抱怨The method setJobName(String) is undefined for the type Trigger。这并不奇怪。

我正在试图弄清楚如何在Quartz 2.x中实现这种兼容性,这是我到目前为止所提出的:

private JobSchedule scheduleExistingJob(JobSchedule schedule) throws SchedulerException
{
  JobInfo jobInfo = schedule.getJobInfo();

  JobDetail job = newJob()
      .withIdentity(jobInfo.getName(), jobInfo.getGroup())
      .build();

  Trigger trigger = QuartzUtils.createTriggerFromJobSchedule(schedule);

  Trigger t = newTrigger()
      .forJob(job)
      .build(); 

  DateTime nextRunDateTime = new DateTime(m_scheduler.scheduleJob(trigger));
  JobSchedule newSched = updateScheduleNextRunDateTime(schedule, nextRunDateTime);
  return newSched;
}

我无法弄清楚如何将作业信息/组与触发器合并。似乎在新的API中我不能指定通用触发器,它必须是Cron或Simple。我也可能在思考一切。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)