繁体   English   中英

如何更新预定的石英作业?

[英]How do update a scheduled quartz Job?

以下两个片段都给出了这个错误:

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

addJob()用于添加没有附加触发器的作业:如果这是您想要的,只需向storeDurably()添加对storeDurably()的调用; 如果,正如我只能猜测,您想在保留旧触发器的同时更新作业,则需要先检索现有触发器,然后,如果触发器不需要更改, scheduler.scheduleJob(newJob, oldTrigger) 否则使用TriggerBuilder.getTriggerBuilder();为其获取构建器TriggerBuilder.getTriggerBuilder(); 构建副本,进行更改,并最终调用scheduler.scheduleJob(newJob, newTrigger)

除了特定于作业的设置之外,如果您使用的是 Spring,您还应该确保您的SchedulerFactoryBean具有overwriteExistingjobs = true 否则,只会保留作业的初始触发器/设置(如果您要保留它们)。

对于非持久作业,您必须使用scheduler.addJob(job, true, true)代替,带有 3 个参数。 第三个参数告诉 Quartz 将作业存储(在 RAM 中)直到它被调度,也就是直到你为它添加触发器:

void addJob(JobDetail jobDetail, boolean replace, boolean storeNonDurableWhileAwaitingScheduling) throws SchedulerException

storeNonDurableWhileAwaitingScheduling参数设置为true ,可以存储非持久作业。 一旦被调度,它将恢复正常的非持久行为(即一旦没有剩余的关联触发器就被删除)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM