【问题标题】:Schedule Task at Interval based on Start time in Quartz根据 Quartz 中的开始时间按间隔安排任务
【发布时间】:2013-01-18 06:25:56
【问题描述】:

我是 Quartz 的新手,我想使用它为使用 SQL Server Express 的客户端提供服务来调度 SQLServer 中的脚本。

我需要用户能够安排任务运行,例如从特定日期开始每隔一周运行一次。例如:StartDate = 1/Jan/2013 12:00PM(星期二),每 14 天重复一次。

在作业的设置中,有一个 StartTime(日期时间)、IntervalUnit(秒、分钟、小时、日、周、年)和 RepeatsEvery(在开始日期之后触发的间隔数)。

例如:StartDate = "1/JAN/2013 12:00PM" 和 IntervalUnit = "DAY" 和 RepeatsEvery= 14 的设置,将在每个第二个星期二下午 12:00 触发作业。如果 StartDate 已经过去,我需要在下一个开始日期触发该作业,例如:如果我今天(2013 年 1 月 18 日)启动了服务,则下一个开始日期将是 29/JAN/2013 12:00PM

我不知道如何使用日历触发器在 Quartz 中完成这项工作。这是 Quartz 内置的东西还是我需要在启动时计算一个新的 StartTime?

假设我必须计算一个新的 StartTime,是否有任何内置函数或简洁的快捷方式,或者我是否需要为每个 IntervalUnit 提供一个类似的函数:

'Days
Dim diff As Integer
diff = Now.Subtract(.StartTime).TotalDays
Dim offset As Integer
offset = .RepeatsEvery - (diff Mod .RepeatsEvery)
offset = Now.AddDays(offset).Subtract(.StartTime).TotalDays 'Get the days from Start t preserve time of day
Start = .StartTime.AddDays(offset)

【问题讨论】:

    标签: vb.net quartz.net


    【解决方案1】:

    您可以创建一个触发器,然后调用 trigger.GetFireTimeAfter(DateTime.Now) 来计算新的开始日期,然后使用新的 StartDate 构建和新的触发器。

    以下是C#,但希望能给你一些想法

    var trigger = TriggerBuilder.Create()
                       .StartAt( new DateTimeOffset(new DateTime(2013,1,1)))
                       .WithSimpleSchedule(x=>x.RepeatForever()
                                              .WithInterval(new TimeSpan(14,0,0,0)))
                        .Build();                
    
    
    var newStartingPoint = trigger.GetFireTimeAfter(DateTime.Now);
    
    if (newStartingPoint.HasValue)  
    { 
         trigger = ((ISimpleTrigger) trigger).GetTriggerBuilder()
                                            .StartAt(newStartingPoint.Value)
                                            .Build();    
    }
    

    .GetTriggerBuilder() 在 ITrigger 上不可用,这就是您必须将触发器强制转换为 ISimpleTrigger 的原因,但同样的原理适用于其他触发器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-06
      • 1970-01-01
      • 2015-06-22
      • 1970-01-01
      • 2011-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多