在下述按顺序执行的Job中,分别用触发器并指定StartAt可以?但没有按预期工作,正确方法是怎样呢?
private void FeedingOrderedPlanSchedule3()
{
// 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("jobSays1", "Hello World1!")
//.StoreDurably(true)
.Build();
ITrigger firstJobTrigger = TriggerBuilder.Create()
.WithIdentity("Trigger", "Pipeline")
.WithSimpleSchedule(x => x
.WithMisfireHandlingInstructionFireNow()
.WithIntervalInSeconds(1)
.WithRepeatCount(1)).StartAt(DateBuilder.FutureDate(1, IntervalUnit.Second))
.Build();
IJobDetail secondJob = JobBuilder.Create<FeedingJob.InnnerJob1>()
.WithIdentity(secondJobKey)
.UsingJobData("jobSays2", "Hello World2!")
.StoreDurably(true)//指示Quartz在Job成为“孤儿”时不要删除Job(当Job不再有Trigger引用它时),按顺序触发关键
.Build();
ITrigger secondJobTrigger = TriggerBuilder.Create()
.WithIdentity("Trigger", "Pipeline")
.WithSimpleSchedule(x => x
.WithMisfireHandlingInstructionFireNow()
.WithIntervalInSeconds(1)
.WithRepeatCount(3)).StartAt(DateBuilder.FutureDate(3, IntervalUnit.Second))
.Build();
JobChainingJobListener listener = new JobChainingJobListener("Pipeline Chain");
listener.AddJobChainLink(firstJobKey, secondJobKey);
scheduler.ListenerManager.AddJobListener(listener, GroupMatcher<JobKey>.GroupEquals("Pipeline"));
// Run it all in chain
scheduler.Start();
scheduler.ScheduleJob(firstJob, firstJobTrigger);
scheduler.AddJob(secondJob, false, true);
}