以下两个代码段都会出现此错误:
org.quartz.SchedulerException:添加了没有触发器的作业必须是 耐用。
JobDetail job = scheduler.getJobDetail(jobKey(jobInfo));
job.getJobDataMap().put(JOB_CONTENT, objectMapper.writeValueAsString(jobInfo));
scheduler.addJob(job, true);
JobDetail job = JobBuilder
.newJob(MyJob.class)
.usingJobData(JOB_CONTENT, objectMapper.writeValueAsString(jobInfo))
.withIdentity(jobKey(jobInfo))
.build();
scheduler.addJob(job, true);
答案 0 :(得分:2)
addJob()
用于添加没有附加触发器的作业:如果这是您想要的,只需将storeDurably()
的调用添加到JobBuilder;如果,我只能猜测,你想在保留旧触发器的同时更新作业,则需要先检索现有的触发器,然后,如果触发器不需要更改,scheduler.scheduleJob(newJob, oldTrigger)
;否则使用TriggerBuilder.getTriggerBuilder();
获取构建器来构建副本,进行更改,最后调用scheduler.scheduleJob(newJob, newTrigger)
。
答案 1 :(得分:0)
对于非持久性作业,您必须使用scheduler.addJob(job, true, true)
代替3个参数。第三个参数告诉Quartz存储作业(在RAM中)直到它被调度,直到你为它添加一个触发器:
void addJob(JobDetail jobDetail, boolean replace, boolean storeNonDurableWhileAwaitingScheduling) throws SchedulerException
将
storeNonDurableWhileAwaitingScheduling
参数设置为true
,可以存储非持久作业。一旦安排好,它将恢复正常的非持久行为(即一旦没有剩余的相关触发器就被删除)。
答案 2 :(得分:0)
除了特定于工作的设置外,如果您使用的是Spring,还应确保std::terminate
具有private static void reverseStack(Stack<Integer> stack) {
for (int i = 0, mid = stack.size() >> 1, j = stack.size() - 1; i < mid; i++, j--)
stack.set(i, stack.set(j, stack.get(i)));
}
。否则,将仅保留作业的初始触发器/设置(如果要保留它们)。