5

我正在从数据库中获取工作详细信息,例如开始时间和生效日期,并且根据工作详细信息,我正在创建工作,但是如果我有另一个新工作条目或计划工作的开始时间已更改怎么办,因此在作业调度程序中将如何添加新作业或在调度程序中更改新的开始时间。

我正在使用 C#.net。

4

3 回答 3

11

我不知道在以前的版本中是否无法更新 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);

来源

于 2016-12-14T10:05:25.610 回答
2

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

于 2012-04-25T22:25:28.590 回答
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);

如果您的触发器被定义为 CronTrigger,我没有检查的另一个选项是更新 cron 表达式

但我从未检查过它,所以我不确定它是否会起作用。

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";
        }
    }
}  
于 2012-04-25T22:36:35.257 回答