我正在编写一个API,接收有关何时何地发出GET请求的请求,然后使用Quartz来安排适当的时间来发出这些请求。目前,我每次发出请求时都会调用getDefaultScheduler,以便安排相应的作业和触发器。我现在正在将作业存储在内存中,但计划稍后使用JDBC存储作业。
这种方法安全吗?我们可以假设应用程序可能存在许多并发请求,并且应用程序将确保不会发生任何触发器和作业名称冲突。
答案 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();
}
}