我想使用quartz builder来创建一个cron触发器并尝试给出startnow指令。但触发器没有启动,而是仅在完成给定的时间间隔后启动。有人可以帮助我在启动server.i时使用普通石英而没有弹簧启动触发器。
Trigger trigger = newTrigger()
.withIdentity(SchedulerConstants.TRIGGER_CLARITY,SchedulerConstants.QI_GROUP)
.withSchedule(cronSchedule("0 0/60 * * * ?").withMisfireHandlingInstructionDoNothing())
.startNow()
.build();
答案 0 :(得分:4)
在CronTrigger上调用startNow()会产生任何影响,因为它会根据提供的cron表达式触发作业,而不像基于时间的SimpleTrigger。
你的cron表达式告诉Quartz从每小时的第0分钟开始每隔60分钟运行一次。 除非你在正好第0分钟启动调度程序,否则你将看不到startNow效果。
希望你清楚这一点。
有关详细信息,请参阅Quartz CronTrigger tutorials/documentation。
答案 1 :(得分:2)
您可以使用StartNow为作业添加第二个触发器。假设你有一个名为SomeJob的工作类,我认为这对你有用。
var schedulerFactory = new StdSchedulerFactory();
var scheduler = schedulerFactory.GetScheduler();
scheduler.Start();
IJobDetail job = JobBuilder.Create<SomeJob>()
.WithIdentity("job1", SchedulerConstants.QI_GROUP)
.Build();
Trigger trigger = newTrigger()
.withIdentity(SchedulerConstants.TRIGGER_CLARITY,SchedulerConstants.QI_GROUP)
.withSchedule(cronSchedule("0 0/60 * * * ?").withMisfireHandlingInstructionDoNothing())
.build();
scheduler.ScheduleJob(job, trigger);
IJobDetail job2 = JobBuilder.Create<SomeJob>()
.WithIdentity("job2", SchedulerConstants.QI_GROUP)
.Build();
Trigger trigger2 = newTrigger()
.withIdentity("trigger2",SchedulerConstants.QI_GROUP)
.StartNow()
.build();
scheduler.ScheduleJob(job2, trigger2);
答案 2 :(得分:1)
“ StartNow()”将使触发器启动,但是此时触发器可能会触发,也可能不会触发,这取决于为触发器配置的时间表。
您可以在应用程序启动时触发任务。
_scheduler.TriggerJob(new JobKey(“ A / BTestConfigsDaily”))。Wait();