石英触发器构建器startnow在启动期间不触发触发器

时间:2013-10-07 07:53:31

标签: quartz-scheduler

我想使用quartz builder来创建一个cron触发器并尝试给出startnow指令。但触发器没有启动,而是仅在完成给定的时间间隔后启动。有人可以帮助我在启动server.i时使用普通石英而没有弹簧启动触发器。

Trigger trigger = newTrigger()
        .withIdentity(SchedulerConstants.TRIGGER_CLARITY,SchedulerConstants.QI_GROUP)
        .withSchedule(cronSchedule("0 0/60 * * * ?").withMisfireHandlingInstructionDoNothing())
        .startNow()
        .build();

3 个答案:

答案 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();