我的方法是否使用Quartz Scheduler的getDefaultScheduler()安全?

时间:2017-09-18 14:21:21

标签: java quartz-scheduler quartz

我正在编写一个API,接收有关何时何地发出GET请求的请求,然后使用Quartz来安排适当的时间来发出这些请求。目前,我每次发出请求时都会调用getDefaultScheduler,以便安排相应的作业和触发器。我现在正在将作业存储在内存中,但计划稍后使用JDBC存储作业。

这种方法安全吗?我们可以假设应用程序可能存在许多并发请求,并且应用程序将确保不会发生任何触发器和作业名称冲突。

1 个答案:

答案 0 :(得分:0)

是的,他们是线程安全的。但请继续查看您正在使用的JobStore实现。这是用于存储作业的DefaultClusteredJobStore impl ..

  public void storeJob(JobDetail newJob, boolean replaceExisting) throws ObjectAlreadyExistsException,
  JobPersistenceException {
JobDetail clone = (JobDetail) newJob.clone();

lock();
try {
  // wrapper construction must be done in lock since serializer is unlocked
  JobWrapper jw = wrapperFactory.createJobWrapper(clone);

  if (jobFacade.containsKey(jw.getKey())) {
    if (!replaceExisting) { throw new ObjectAlreadyExistsException(newJob); }
  } else {
    // get job group
    Set<String> grpSet = toolkitDSHolder.getOrCreateJobsGroupMap(newJob.getKey().getGroup());
    // add to jobs by group
    grpSet.add(jw.getKey().getName());

    if (!jobFacade.hasGroup(jw.getKey().getGroup())) {
      jobFacade.addGroup(jw.getKey().getGroup());
    }
  }

  // add/update jobs FQN map
  jobFacade.put(jw.getKey(), jw);
} finally {
  unlock();
}

}