2011-06-30 55 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)。所以,我所做的就是減少失火門檻,它像一個魅力。