2011-06-06 29 views
11

我想觸發動態添加到作業,但無法找到任何有用的方法關閉調度添加多個觸發器來一個水晶工作

的我,雖然我也只是能夠調用scheduleJob方法的反覆,但是這給了我ObjectAlreadyExists異常「,因爲已經存在這個標識」。

我該怎麼做?

EDIT

private boolean scheduleLoadJob(XfuScheduleTimeInfo time) 
{ 
    LoadScheduleJob job = new LoadScheduleJob(time); 
    JobDetail detail; 

    Integer id = Integer.valueOf(time.getScheduleId()); 
    if(_hashMap.containsKey(id)) 
    { 
     detail = _hashMap.get(Integer.valueOf(time.getScheduleId())); 
    } 
    else 
    { 
     detail = job.getDetail(); 
     _hashMap.put(id, detail); 
    } 

    try 
    { 
     Trigger newTrigger = job.getTrigger(); 
     _log.debug("------" + newTrigger.getKey()); 
     _quartzScheduler.scheduleJob(detail, newTrigger); 
     return true; 
    } 
    catch(ParseException e) 
    { 
     _log.error("Unable to parse cron expression for " + job.getInfo()); 
     return false; 
    } 
    catch(SchedulerException e) 
    { 
     _log.error("Job scheduling failed for " + job.getInfo()); 
     return false; 
    } 
} 

隨着控制檯輸出

------ LoadJobs.Trigger-44

批次採集的1觸發

生產的實例Job'LoadJobs.Job-42',class = com.scheduling.LoadScheduleJob

調用執行對工作LoadJobs.Job-42

批次採集的1觸發

工作要求:42:44

------ LoadJobs.Trigger-45

42:45 - 1/5 * *的作業調度失敗? * *

回答

8

This post給人一種暗示,但結論(schedulerInstance.add(觸發))是無效的石英2.01。

而是使用下面的工作assinging到觸發後(一個方法是使用TriggerBuilder的forJob法)

schedulerInstance.scheduleJob(newTrigger) 
+0

Hi Jake.I有一個cron表達式列表,如def list = [「0 0/10 * * *?」,「0 0/20 * * *?」,「0 0/30 * * *?」]和我想創建一個像字符串triggerName循環中的觸發器; \t int j = 0; \t for(cronExpr in list) \t { \t j ++; \t \t \t triggerName = 「觸發」 + Integer.toString(J) \t \t \t triggerName =新CronTrigger(); \t \t \t triggerName。的setName(triggerName); \t \t \t triggerName.setGroup(job.getGroup()); \t \t \t triggerName.setJobName(job.getName()); \t \t \t triggerName.setCronExpression(cronExpr); },並調用石英不同的時間與不同的參數執行()方法。我該怎麼辦? – elyon 2015-01-07 19:29:45

1

您可以反覆調用scheduleJob。只要確保你給每個觸發器一個獨特的名稱/組。

見TriggerBuilder.withIdentity:http://www.quartz-scheduler.org/docs/api/2.0.0/index.html

+0

觸發器有不同的名稱。我錯過了部分錯誤,它說 - 無法存儲作業:'LoadJobs.Job-42',因爲已經存在這個標識,所以看起來問題出在作業 – rediVider 2011-06-06 21:37:25

+0

無法存儲作業:'LoadJobs。 Job-42',因爲這個標識已經存在。 – rediVider 2011-06-06 21:41:11

4
CronTrigger trigger=null; 
    CronTrigger trigger1=null; 
    CronTrigger trigger2=null; 

    JobDetail job = new JobDetail(); 
    job.setName("dummyJobName"); 
    job.setJobClass(ExampleJob.class); 

    trigger = new CronTrigger(); 
    trigger.setName("AppTrigger"); 
    trigger.setGroup(job.getGroup()); 
    trigger.setJobName(job.getName()); 
    trigger.setJobGroup(job.getGroup()); 
    trigger.setCronExpression("*/2 * * * * ?"); 

    trigger1 = new CronTrigger(); 
    trigger1.setName("AppTrigger1"); 
    trigger1.setGroup(job.getGroup()); 
    trigger1.setJobName(job.getName()); 
    trigger1.setJobGroup(job.getGroup()); 
    trigger1.setCronExpression("*/2 * * * * ?"); 

    trigger2 = new CronTrigger(); 
    trigger2.setName("AppTrigger2"); 
    trigger2.setGroup(job.getGroup()); 
    trigger2.setJobName(job.getName()); 
    trigger2.setJobGroup(job.getGroup()); 
    trigger2.setCronExpression("*/2 * * * * ?"); 

    Scheduler scheduler = new StdSchedulerFactory().getScheduler(); 

    scheduler.start(); 
    scheduler.addJob(job, true); 
    scheduler.scheduleJob(trigger); 
    scheduler.scheduleJob(trigger1); 
    scheduler.scheduleJob(trigger2);