4

我正在尝试使用石英生成器来创建 cron 触发器并尝试给出 startnow 指令。但触发器并未启动,而是仅在完成给定时间间隔后才启动。有人可以帮助我在启动服务器期间启动触发器。我使用的是普通石英,没有弹簧。

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

3 回答 3

7

在 CronTrigger 上调用 startNow() 不会有任何影响,因为它根据提供的 cron 表达式触发作业,这与基于时间的 SimpleTrigger 不同。

您的 cron 表达式告诉 Quartz 从每小时的第 0 分钟开始每 60 分钟运行一次。除非您恰好在第 0 分钟启动调度程序,否则您不会看到 startNow 效果。

希望这对你来说很清楚。

有关更多详细信息,请参阅Quartz CronTrigger 教程/文档

于 2013-10-07T17:03:03.893 回答
3

您可以使用 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);
于 2015-03-28T23:32:33.500 回答
1

.startNow()将让触发器启动,但此时触发器可能会触发也可能不会触发 - 取决于为触发器配置的计划。

您可以在应用程序启动时触发任务

_scheduler.TriggerJob(new JobKey("A/BTestConfigsDaily")).Wait();

于 2018-10-10T03:00:48.820 回答