首页 > 解决方案 > Quartz Scheduler 在已经存在作业时添加作业

问题描述

我正在尝试根据从数据库获得的一些数据添加作业。我在日志中收到错误

Unable to store job with name.... job already exists

在尝试添加我的最终工作时。现在的问题是我每 5 分钟执行一次此操作,我必须这样做,所以我知道该作业存在并且正在运行。我试图“检测”它

JobDetail job = new JobDetail();
            job.setGroup(GROUP_NAME);
            job.setName(REPORT + reports.getName());
            job.setJobClass(GenericJob.class);
            JobDataMap jobDataMap = new JobDataMap();
            jobDataMap.put("format",reports.getFormat());
            job.setJobDataMap(jobDataMap);

            CronTrigger trigger = new CronTrigger();
            trigger.setName("trigger for: " + job.getName());
            trigger.setCronExpression(reports.getSchedule());
            trigger.setEndTime(reports.getEndDate().getTime());
            trigger.setStartTime(reports.getStartDate().getTime());
            trigger.setGroup(GROUP_NAME);
            List<JobExecutionContext> executedJobs = new LinkedList<JobExecutionContext>();
            List<JobDetail> jobDetails = new LinkedList<JobDetail>();
            List jobList = scheduler.getCurrentlyExecutingJobs();
            for (Object o : jobList) {
                JobExecutionContext context = (JobExecutionContext) o;
                Date previous = context.getPreviousFireTime();
                if (previous == null) continue; //your job has not been executed yet

                executedJobs.add(context); //there's your list!
            }
            for (JobExecutionContext j: executedJobs){
                jobDetails.add(j.getJobDetail());
            }


            if (!jobDetails.contains(job)) {
                scheduler.scheduleJob(job, trigger);
            }

但是我的 scheduler.getCurrentlyExecutingJobs() 没有看到有问题的工作。只有当我在调试中停止代码约 2 分钟时,我才能看到它。另外我使用的是quartz 1.8.6,因为我必须能够使用Java 6 的服务器上的项目,这就是我不能使用checkExists() 方法的原因。谁能帮我理解似乎是什么问题?

标签: javaschedulerquartz

解决方案


推荐阅读