1
我正在使用Quartz计划Java中的作业。 调度程序无限重复。 如果Job.class中发生某种异常,我需要关闭调度程序。 如何获取作业以通知计划类关闭()?石英 - 基于作业变量的关闭计划程序
感谢, RayK
我正在使用Quartz计划Java中的作业。 调度程序无限重复。 如果Job.class中发生某种异常,我需要关闭调度程序。 如何获取作业以通知计划类关闭()?石英 - 基于作业变量的关闭计划程序
感谢, RayK
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"));
这里Unscheduling的情景 - 每天早晨,一组文件被发送到一个文件夹。我的代码在这个文件夹中搜索3A和7A之间的文件。如果找到这些文件,我将它们移动并处理它们。每次作业运行后,都没有找到文件(文件被移动),所以没有其他处理。第二天早上,整个过程重新开始。问题是当天没有文件移动到那个文件夹。如果在上午7点,没有处理完成,我需要关闭调度程序,以便它不会尝试处理下一天的文件。他们需要顺序完成。 – DropOfGoldenSun
@DropOfGoldenSun Oohhhh 3 AM-7AM帅哥!对不起,我不认识你。我会编辑我的答案以解决你刚才所说的问题。 – walen
这就是我。我仍然试图把这一切都弄清楚。谢谢你的帮助。 – DropOfGoldenSun