tec*_*rat 5 java quartz-scheduler
我有以下构建新JobDetail实例的方法;
private JobDetail getJob(JobID jobID) throws SchedulerException {
Class<? extends Job> jobClass = jobID.getJobClass();
if(jobClass != null){
return JobBuilder
.newJob(jobClass)
.withIdentity(jobID.jobName(), jobID.jobGroup())
.requestRecovery(true)
.build();
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
注意:JobID这只是我的帮助程序类,它提供了构建数据库所需的所有必要原始数据JobDetail
然后是另一种进行实际调度的方法;
doSchedule(Scheduler scheduler, JobDetail job, String triggerName){
Trigger trigger = buildSomeTrigger(triggerName);
//check whether job exists in scheduler instance
if(scheduler.checkExists(job.getKey())){
//If trigger also exists, then it probably holds new info
//So, reschedule the existing job with the trigger
if(scheduler.checkExists(trigger.getKey())){
System.out.println("update job with Trigger");
job = job.getJobBuilder().storeDurably(true).build();
scheduler.addJob(job, true);
Trigger oldTrigger = scheduler.getTrigger(trigger.getKey());
scheduler.rescheduleJob(oldTrigger.getKey(), trigger);
}else{
//If trigger does not exist, it's an entirely new trigger
//Add the new trigger to the existing job
System.out.println("save new trigger for job");
trigger = trigger.getTriggerBuilder().forJob(job).build();
scheduler.scheduleJob(trigger);
}
}else{
//If job does not exist, schedule new job with the trigger
System.out.println("schedule new job with trigger");
scheduler.scheduleJob(job, trigger);
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:这是什么getNewSchedulerInstance()样子;
private Scheduler getNewSchedulerInstance() {
Scheduler scheduler = null;
try {
scheduler = new StdSchedulerFactory("quartz.properties").getScheduler();
scheduler.setJobFactory(cdiJobFactory); //<== Utilizes the JobFactory implementation specified in the CdiJobFactory.java class
scheduler.getListenerManager().addJobListener(new SimpleJobListener());
scheduler.getListenerManager().addTriggerListener(new SimpleTriggerListener());
} catch (SchedulerException ex) {
System.out.println("Scheduler instantiation failed!");
ex.printStackTrace();
}
return scheduler;
}
Run Code Online (Sandbox Code Playgroud)
最后,用另一种方法,我得到以下内容:
//This returns a new instance of Scheduler
Scheduler scheduler = getNewSchedulerInstance();
if(scheduler != null){
JobID jobID = new ExtendedJobID(); // <== extends JobID
JobDetail job = getJob(jobID);
doSchedule(scheduler, job);
}
Run Code Online (Sandbox Code Playgroud)
通常我希望能打印出来。
用触发器安排新工作
但是,它正在打印;
保存新的工作触发器
编辑:并因此引发以下异常;
org.quartz.JobPersistenceException: Couldn't store trigger 'GOALS.ACTIVATE_GOALS_0:0' for 'GOALS.ACTIVATE_GOALS' job:
The job (GOALS.ACTIVATE_GOALS) referenced by the trigger does not exist.
[See nested exception: org.quartz.JobPersistenceException: The job (GOALS.ACTIVATE_GOALS) referenced by the trigger does not exist.]
Run Code Online (Sandbox Code Playgroud)
scheduler.checkExists(job.getKey())回报true scheduler.checkExists(trigger.getKey()) 退货 falseThe job (*jobName*) referenced by the (*trigger*) does not exist因此,这使我感到困惑,因为似乎scheduler.checkExists(...)无法正确地检查作业是否存在于调度程序中
如果检查执行了我期望的操作,则甚至不应抛出该异常;
但是正如您所看到的,JobDetail是新构建的,并且之前从未以任何方式与调度程序相关联...
所以我想知道我是否缺少一些Quartz Scheduler点?
如果是这样,有人可以在这里解释我可能做错了吗?...
还是这可能是一个错误?
有什么解决方法吗?
| 归档时间: |
|
| 查看次数: |
1618 次 |
| 最近记录: |