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