Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java jobkey中的Quartz jobdetail为空_Java_Quartz Scheduler - Fatal编程技术网

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
在哪里?