2011-06-30 28 views
0

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

有对我来说,编程除了这是使用Quartz作业的配置的一部分的作业创建动态工作的要求。一切正常,直到我重新启动服务器。此时,overwriteExistingJobs = true会出现问题。

说,如果我有一个动态的工作创建执行每两分钟。而且,我停止服务器并在十分钟后启动服务器,一旦服务器启动,作业就会执行五次。但是,如果弹簧配置中包含某项作业(如春季文档中提供的作业),则在服务器重新启动时会覆盖该作业。

我的观察一直是对于那些在Spring配置文件中配置并添加到org.springframework.scheduling.quartz.SchedulerFactoryBean的 PREV_FIRE_TIME在QRTZ_TRIGGERS表被更新为“-1”,但动态创建工作它没有被覆盖的工作。

回答

1

修复的方法是如下:

一)我与动态作业关联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)。所以,我所做的就是减少失火门槛,它像一个魅力。