2017-06-06 72 views
1

两个以下片断给这个错误:如何更新预定的石英工作?

org.quartz.SchedulerException: Jobs added with no trigger must be durable.

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

回答

2

addJob()是不附加任何触发器增加就业机会:如果这是你想要什么,只需添加一个调用storeDurably()到JobBuilder;如果我只能猜测你想在保留旧触发器的情况下更新作业,则需要先检索现有的触发器,然后,如果触发器不需要更改,则需要scheduler.scheduleJob(newJob, oldTrigger);否则请使用TriggerBuilder.getTriggerBuilder();为其构建一个副本,进行更改并最终致电scheduler.scheduleJob(newJob, newTrigger)

0

对于不耐用的工作,您必须使用scheduler.addJob(job, true, true)代替3个参数。第三个参数告诉Quartz存储作业(在RAM中)直到它被调度,直到你为它添加一个触发器:

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

With the storeNonDurableWhileAwaitingScheduling parameter set to true , a non-durable job can be stored. Once it is scheduled, it will resume normal non-durable behavior (i.e. be deleted once there are no remaining associated triggers).

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

With the storeNonDurableWhileAwaitingScheduling parameter set to true , a non-durable job can be stored. Once it is scheduled, it will resume normal non-durable behavior (i.e. be deleted once there are no remaining associated triggers).