我在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而我不想重载请求)
是否有重复延迟或优先级属性?我找不到任何文件这么说..
答案 0 :(得分:4)
我知道你是通过XML做到的,但是在代码中你可以将StartTimeUtc
设置为像这样延迟30秒......
trigger.StartTimeUtc = DateTime.UtcNow.AddSeconds(30);
答案 1 :(得分:0)
你现在可能已经看过这个了,但它可以连接工作,虽然不支持开箱即用。
答案 2 :(得分:0)
这并不是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))