使用Quartz只运行一次Job

有没有办法使用Quartz(java)只运行一次作业。 我知道在这种情况下使用Quartz是没有意义的,但事情是我有多个工作,并且它们运行多次,所以我使用Quartz。

这是否可能。

您应该使用在特定时间触发而不重复的SimpleTrigger。 TriggerUtils有许多方便的方法来创建这些东西。

是的,这是可能的!

JobKey jobKey = new JobKey("testJob"); JobDetail job = newJob(TestJob.class) .withIdentity(jobKey) .storeDurably() .build(); scheduler.addJob(job, true); scheduler.triggerJob(jobKey); //trigger a job inmediately 

在quartz> 2.0中,您可以让调度程序在工作完成后取消计划任何作业:

 @Override protected void execute(JobExecutionContext context) throws JobExecutionException { ... // process execution ... context.getScheduler().unscheduleJob(triggerKey); ... } 

其中triggerKey是仅运行一次的作业的ID。 在此之后,不再调用该作业。

以下是如何使用Quartz 2.x立即运行TestJob类的示例:

 public JobKey runJob(String jobName) { // if you don't call startAt() then the current time (immediately) is assumed. Trigger runOnceTrigger = TriggerBuilder.newTrigger().build(); JobKey jobKey = new JobKey(jobName); JobDetail job = JobBuilder.newJob(TestJob.class).withIdentity(jobKey).build(); scheduler.scheduleJob(job, runOnceTrigger); return jobKey; } 

另请参见Quartz Enterprise Job Scheduler教程 → SimpleTriggers

我不确定在Mono和Java中有多少相似的Quartz,但这似乎在.Net中有效

 TriggerBuilder.Create () .StartNow () .Build ();