群集模式下的Spring和Quartz集成不会覆盖现有作业

时间:2011-06-30 11:10:23

标签: quartz-scheduler

我使用Spring 3和Quartz 1.8.5以集群模式安排作业。我在Spring的调度程序配置中放置了overwriteExistingJobs = true。

除了作为使用Quartz作业的配置的一部分的作业之外,我还需要以编程方式创建动态作业。一切正常,直到我重新启动服务器。此时,overwriteExistingJobs = true存在问题。

说,如果我创建了一个动态作业,每两分钟执行一次。并且,我停止服务器并在十分钟后启动它,一旦服务器启动,作业就会执行五次。但是,如果有一个作为spring配置的一部分的作业,就像spring文档中给出的一样,那么当服务器重新启动时它会被覆盖。

我的观察是,对于在spring配置文件中配置并添加到org.springframework.scheduling.quartz.SchedulerFactoryBean的作业, QRTZ_TRIGGERS表中的PREV_FIRE_TIME更新为“-1”,但对于动态创建的作业,它不会被覆盖。

1 个答案:

答案 0 :(得分:1)

修复方法如下:

a)我有CronTriggers与动态工作相关联,所以我所做的就是提供误操作指令。

JobDetail jobDetail = new JobDetail(job.getDescription(), job.getName(),job.getClass());
CronTrigger crTrigger = new CronTrigger( "cronTrigger", job.getName(), cronExpression);
crTrigger.setStartTime(firstFireTime);
crTrigger.setMisfireInstruction(CronTrigger.MISFIRE_INSTRUCTION_DO_NOTHING);
scheduler.scheduleJob(jobDetail, crTrigger);

b)失火阈值相当高(6000000)。所以,我所做的是减少失火阈值,它就像一个魅力。