如何在Quartz.Net中添加新作业或更新现有作业的触发器?

时间:2012-04-25 18:54:14

标签: c# cron quartz-scheduler quartz.net

我从数据库中获取工作细节,如开始时间和生效日期,并根据工作细节,我正在创建工作,但如果我有新工作的另一个条目或者开始时间已更改,该怎么办?预定作业,以及如何在作业调度程序中添加新作业或新的开始时间将在调度程序中更改。

我正在使用C#.net。

3 个答案:

答案 0 :(得分:5)

我不知道在以前的版本中是否无法更新Quartz中的现有触发器,但可以在较新版本中更新触发器(从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

答案 1 :(得分: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";
        }
    }
}  

答案 2 :(得分:0)

您需要使用新触发器安排作业。触发器一旦创建就无法更新。