【发布时间】:2015-11-24 05:46:48
【问题描述】:
我们已经安装了quartz.net 调度程序服务并配置了一个(内存)作业以在每天晚上10 点运行。如果托管此服务的服务器重新启动,是否有办法在服务启动后强制作业运行?在正常情况下,作业应按计划在晚上 10 点触发,但无论何时重新启动服务器/服务,我们都希望该作业立即运行,即使当时未计划运行。如果有一些配置值可以实现这一点,那将是最好的选择。
【问题讨论】:
我们已经安装了quartz.net 调度程序服务并配置了一个(内存)作业以在每天晚上10 点运行。如果托管此服务的服务器重新启动,是否有办法在服务启动后强制作业运行?在正常情况下,作业应按计划在晚上 10 点触发,但无论何时重新启动服务器/服务,我们都希望该作业立即运行,即使当时未计划运行。如果有一些配置值可以实现这一点,那将是最好的选择。
【问题讨论】:
编写一个小代码来读取一个小的 xml 文件(自定义一个你自己做的).... 并将其放入您的启动代码中。
foreach( xmlElement in yourXmlFile)
{
string someJobName= ""; /* read xml for jobName */
String someJobGroup= ""; /* read xml for job group name */
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity(someJobName, someJobGroup)
.startNow()
.build();
}
【讨论】:
您可以借助CronScheduleBuilder 的WithMisfireHandlingInstructionFireAndProceed 方法执行此操作,如下所示:
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("trigger1", "group1")
.StartNow()
.WithSchedule(CronScheduleBuilder
.WeeklyOnDayAndHourAndMinute(DayOfWeek.Monday, 09, 00)
.WithMisfireHandlingInstructionFireAndProceed()
//MISFIRE_INSTRUCTION_FIRE_NOW
.InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("GTB Standard Time"))
)
//.ForJob(myJobKey)
.Build();
scheduler.ScheduleJob(job, trigger);
希望这会有所帮助...
【讨论】: