使用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 ();