2012-04-25 69 views
4

我從數據庫中獲取作業詳細信息,例如開始時間和生效日期,並根據作業詳細信息創建工作,但是如果我有新作業的另一個條目或者計劃作業的開始時間已更改,那麼在作業計劃程序中將如何添加新作業或新計劃的開始時間將會更改。如何添加新作業或更新Quartz.Net中現有作業的觸發器

我正在使用C#點網,所以請回復我一樣。

請幫助我,因爲它對我來說非常緊迫。

在此先感謝。

回答

0

您需要使用新的觸發器安排作業。觸發器一旦創建就無法更新。

+0

嗨, 我很新的quartz.net所以可以請你給我提供了一些示例應用程序。我會感謝你的努力。 謝謝 – user1301587 2012-04-26 12:52:45

+0

你正在運行哪個版本? API在V1和V2之間發生了顯着變化。 – jvilalta 2012-04-26 15:25:15

+2

事實上,他們可以在2.1.x – 2013-08-25 00:03:52

1

您可以刪除並創建新的一個觸發器。已經在這裏回答了。

使用Quarzt 1.0.3刪除觸發器使用

Scheduler.UnscheduleJob(triggerName, groupName); 

,並創造新的例如一個

CronTrigger trigger = new CronTrigger(string.Format(TRIGGER_NAME_FORMAT, jobName), TRIGGER_DEFAULT_GROUP, jobName, groupName, utcDate, null, cronExpression, TimeZoneInfo.Utc); 

Scheduler.ScheduleJob(job, trigger); 

另一種選擇,我沒有檢查是否是更新cron表達式 您觸發器被定義爲CronTrigger

但我從來沒有檢查過,所以我不知道它是否會工作。

foreach (Trigger trigger in Scheduler.GetTriggersOfJob(jobName, group)) 
{ 

    if (trigger is CronTrigger) 
    { 

     CronTrigger cronTrigger = trigger as CronTrigger; 
     if (cronTrigger != null) 
     { 
      cronTrigger.CronExpressionString = "Your Updated Cron Strin"; 
     } 
    } 
} 
+1

這不起作用,觸發器在創建後無法更新。 – jvilalta 2012-04-26 15:26:27

2

我不知道這是不可能的更新石英現有的觸發器在以前的版本,但它有可能以更新新版本的觸發器(截至2 *)。

更新可以實現如下(適用於Quartz.net);

// retrieve the trigger 
Trigger oldTrigger = sched.GetTrigger(new TriggerKey("oldTrigger", "group1")); 

// obtain a builder that would produce the trigger 
TriggerBuilder tb = oldTrigger.GetTriggerBuilder(); 

// update the schedule associated with the builder, and build the new trigger 
// (other builder methods could be called, to change the trigger in any desired way) 
Trigger newTrigger = tb.WithSimpleSchedule(x => x.WithIntervalInSeconds(10).WithRepeatCount(10)) 
    .Build(); 

sched.RescheduleJob(oldTrigger, newTrigger); 

Source

相關問題