1.以下方式定义按顺序执行的job可以很好的执行。
2.在下述三个Job中,都用触发器并指定StartAt可以吗?因为每个job都要有延时执行时间。
private void FeedingOrderedPlanSchedule2()
{
// Get scheduler and add object
IScheduler scheduler = MySchedulerFactory.GetScheduler();
JobKey firstJobKey = JobKey.Create("FirstJob", "Pipeline");
JobKey secondJobKey = JobKey.Create("SecondJob", "Pipeline");
JobKey thirdJobKey = JobKey.Create("ThirdJob", "Pipeline");
// Create job and trigger
IJobDetail firstJob = JobBuilder.Create<FeedingJob.OuterJob>()
.WithIdentity(firstJobKey)
.UsingJobData("jobSays", "Hello World!")
//.StoreDurably(true)
.Build();
IJobDetail secondJob = JobBuilder.Create<FeedingJob.InnnerJob>()
.WithIdentity(secondJobKey)
.StoreDurably(true)//指示Quartz在Job成为“孤儿”时不要删除Job(当Job不再有Trigger引用它时),按顺序触发关键
.Build();
IJobDetail thirdJob = JobBuilder.Create<FeedingJob.InnnerJob>()
.WithIdentity(thirdJobKey)
.StoreDurably(true)
.Build();
ITrigger firstJobTrigger = TriggerBuilder.Create()
.WithIdentity("Trigger", "Pipeline")
.WithSimpleSchedule(x => x
.WithMisfireHandlingInstructionFireNow()
.WithIntervalInSeconds(15)
.WithRepeatCount(3)).StartAt(DateBuilder.FutureDate(1, IntervalUnit.Second))
.Build();
JobChainingJobListener listener = new JobChainingJobListener("Pipeline Chain");
listener.AddJobChainLink(firstJobKey, secondJobKey);
listener.AddJobChainLink(secondJobKey, thirdJobKey);
scheduler.ListenerManager.AddJobListener(listener, GroupMatcher<JobKey>.GroupEquals("Pipeline"));
// Run it all in chain
scheduler.Start();
scheduler.ScheduleJob(firstJob, firstJobTrigger);
scheduler.AddJob(secondJob, false, true);
scheduler.AddJob(thirdJob, false, true);
//Console.ReadLine();
//scheduler.Shutdown();
//Console.WriteLine("Scheduler shutdown.");
//Console.WriteLine(history);
//Console.ReadLine();
}