2017-04-04 34 views

回答

1

Quartz的工作是通过调用其execute(JobExecutionContext)方法运行。此JobExecutionContext对象有一个getScheduler()方法来访问正在运行作业的Scheduler

所以,你可能只是这样做:

class YourJob implements Job { 
    //... 
    @Override 
    public void execute(final JobExecutionContext context) throws JobExecutionException { 
     //... 
     if (someCondition) { 
      try { 
       context.getScheduler().shutdown(); 
      } catch (SchedulerException e) { 
       // log or rethrow! 
      } 
     } 
     //... 

不过,我真的不知道,如果关闭调度向下运行作业的中间是一个好主意。你为什么想这样做?如果你正在试图做的一切都是为了阻止再次运行一些工作,这可能是更好的只是unschedule它:

Unscheduling工作的特定触发:

// Unschedule a particular trigger from the job (a job may have more than one trigger) 
scheduler.unscheduleJob(triggerKey("trigger1", "group1")); 

删除作业和所有触发器

scheduler.deleteJob(jobKey("job1", "group1")); 
+0

这里Unscheduling的情景 - 每天早晨,一组文件被发送到一个文件夹。我的代码在这个文件夹中搜索3A和7A之间的文件。如果找到这些文件,我将它们移动并处理它们。每次作业运行后,都没有找到文件(文件被移动),所以没有其他处理。第二天早上,整个过程重新开始。问题是当天没有文件移动到那个文件夹。如果在上午7点,没有处理完成,我需要关闭调度程序,以便它不会尝试处理下一天的文件。他们需要顺序完成。 – DropOfGoldenSun

+0

@DropOfGoldenSun Oohhhh 3 AM-7AM帅哥!对不起,我不认识你。我会编辑我的答案以解决你刚才所说的问题。 – walen

+0

这就是我。我仍然试图把这一切都弄清楚。谢谢你的帮助。 – DropOfGoldenSun