Java jobkey中的Quartz jobdetail为空
我有以下两种方法,Java jobkey中的Quartz jobdetail为空,java,quartz-scheduler,Java,Quartz Scheduler,我有以下两种方法, initialJob(); otherJobs(); 其他作业只需在初始作业完成后启动 这是最初的作业方法 private void initialJob(){ JobDetail jobDetail = JobBuilder.newJob(RestTriggerForQuartzJobs.class) .withIdentity("INITIAL_JOB_NAME", TRIGGER_GROUP)
initialJob();
otherJobs();
其他作业只需在初始作业完成后启动
这是最初的作业方法
private void initialJob(){
JobDetail jobDetail = JobBuilder.newJob(RestTriggerForQuartzJobs.class)
.withIdentity("INITIAL_JOB_NAME", TRIGGER_GROUP)
.usingJobData("PARAM", "")
.build();
Trigger trigger = TriggerBuilder.newTrigger().forJob(jobDetail).startNow().build();
scheduler.scheduleJob(jobDetail, trigger);
}
在这里,我正在检查初始工作是否已完成。如果不是,则递归调用相同的方法,直到完成为止
private void otherJobs(){
if(isJobComplete("INITIAL_JOB_NAME")){
JobDetail jobDetail = JobBuilder.newJob(RestTriggerForQuartzJobs.class)
.withIdentity("JOB_NAME", TRIGGER_GROUP)
.usingJobData("PARAM", "")
.build();
Trigger trigger = TriggerBuilder.newTrigger().forJob(jobDetail).startNow().build();
scheduler.scheduleJob(jobDetail, trigger);
}else{
otherJobs();
}
}
在isComplete方法中,jobDetail jobDetail=scheduler.getJobDetail(jobKey)事件的jobDetail变为null,尽管我可以在quartz触发器表中看到DEFAULT.INITIAL\u JOB\u名称
private Boolean isJobComplete(String jobName) throws SchedulerException {
JobKey jobKey = new JobKey(jobName);
JobDetail jobDetail = scheduler.getJobDetail(jobKey);
List<? extends Trigger> triggers = scheduler.getTriggersOfJob(jobDetail.getKey());
for (Trigger trigger : triggers) {
TriggerState triggerState = scheduler.getTriggerState(trigger.getKey());
if (TriggerState.COMPLETE.equals(triggerState)) {
return true;
}
}
return false;
}
私有布尔值isJobComplete(字符串jobName)引发ScheduleException{
JobKey JobKey=新的JobKey(jobName);
JobDetail JobDetail=scheduler.getJobDetail(jobKey);
List方法调度程序。getJobDetail(jobKey)
返回null,因为jobKey
由名称和组组成,以便唯一标识作业
这意味着您必须同时使用姓名和组启动您的JobKey
:
private Boolean isJobComplete(String jobName) throws SchedulerException {
JobKey jobKey = new JobKey(jobName, TRIGGER_GROUP);
JobDetail jobDetail = scheduler.getJobDetail(jobKey);
...
顺便提一下,另一个技巧是:在未定义的时间内递归调用方法otherJobs
可能会导致stackoverflowerr
。可能对您的用例有用。方法isComplete
在哪里?