5

我在 Quartz 中设置了一些作业以按设定的时间间隔运行。问题是,当服务启动时,它会尝试一次启动所有作业……有没有办法使用 .xml 配置为每个作业添加延迟?

以下是 2 个作业触发器示例:

 <simple>
    <name>ProductSaleInTrigger</name>
    <group>Jobs</group>
    <description>Triggers the ProductSaleIn job</description>
    <misfire-instruction>SmartPolicy</misfire-instruction>
    <volatile>false</volatile>
    <job-name>ProductSaleIn</job-name>
    <job-group>Jobs</job-group>
    <repeat-count>RepeatIndefinitely</repeat-count>
    <repeat-interval>86400000</repeat-interval>        
  </simple>

 <simple>
    <name>CustomersOutTrigger</name>
    <group>Jobs</group>
    <description>Triggers the CustomersOut job</description>
    <misfire-instruction>SmartPolicy</misfire-instruction>
    <volatile>false</volatile>
    <job-name>CustomersOut</job-name>
    <job-group>Jobs</job-group>
    <repeat-count>RepeatIndefinitely</repeat-count>
    <repeat-interval>43200000</repeat-interval> 
  </simple>

如您所见,有 2 个触发器,第一个每天重复,下一个每天重复两次。

我的问题是我希望第一个或第二个工作在另一个之后几分钟开始......(因为它们最终都在访问相同的 API,而且我不想超载请求)

是否有重复延迟或优先属性?我找不到任何文件这么说..

4

3 回答 3

4

I know you are doing this via XML but in code you can set the StartTimeUtc to delay say 30 seconds like this...

trigger.StartTimeUtc = DateTime.UtcNow.AddSeconds(30);
于 2011-06-23T04:32:15.353 回答
2

这对于您的 XML 文件来说并不是一个完美的答案 - 但通过代码,您可以在构建触发器时使用 StartAt 扩展方法。

/* calculate the next time you want your job to run - in this case top of the next hour */
var hourFromNow = DateTime.UtcNow.AddHours(1);
var topOfNextHour = new DateTime(hourFromNow.Year, hourFromNow.Month, hourFromNow.Day, hourFromNow.Hour, 0, 0);

/* build your trigger and call 'StartAt' */
TriggerBuilder.Create().WithIdentity("Delayed Job").WithSimpleSchedule(x => x.WithIntervalInSeconds(60).RepeatForever()).StartAt(new DateTimeOffset(topOfNextHour))
于 2016-05-19T01:02:41.727 回答
0

您现在可能已经看到了这一点,但是可以链接作业,尽管它不支持开箱即用。

http://quartznet.sourceforge.net/faq.html#howtochainjobs

于 2011-02-09T16:36:04.627 回答