我有一些任務是在Java Quartz Jobs的幫助下執行的,但我需要通過代碼中的某些條件來停止一些任務。我讀到這可以通過InterruptableJob完成。但我不明白我該怎麼做?如何中斷或停止當前正在運行的石英工作?
18
A
回答
33
你需要寫一份你的工作作爲InterruptableJob的實施。 要中斷這份工作,你需要處理對Scheduler,並調用interrupt(jobKey<<job name & job group>>)
請具有以上班看看@的javadoc,還石英分發包含一個這樣的例子(實施例7)。
4
石英2.1使用Spring,你可以:
@Autowired
private Scheduler schedulerFactoryBean; //injected by spring
...
...
List<JobExecutionContext> currentlyExecuting = schedulerFactoryBean.getCurrentlyExecutingJobs();
//verifying if job is running
for (JobExecutionContext jobExecutionContext : currentlyExecuting) {
if(jobExecutionContext.getJobDetail().getKey().getName().equals("JobKeyNameToInterrupt")){
result = schedulerFactoryBean.interrupt(jobExecutionContext.getJobDetail().getKey());
}
}
2
在我看來,最好的辦法是在這個線程所描述的:一套停止後http://forums.terracotta.org/forums/posts/list/7700.page
我剛剛出臺了「休眠」標誌爲true以允許工作完成乾淨。
@Override
public void interrupt() throws UnableToInterruptJobException {
stopFlag.set(true);
try {
Thread.sleep(30000);
} catch (InterruptedException e) {
//logger.error("interrupt()", e);
}
Thread thread = runningThread.getAndSet(null);
if (thread != null)
thread.interrupt();
}
2
我不知道爲什麼沒有人提到過這個問題,或者這個問題在提問時沒有提供。
調度程序實例有一種稱爲關閉的方法。
SchedulerFactory factory = new StdSchedulerFactor();
Scheduler scheduler = factory.getScheduler();
以上用於啓動工作像
scheduler.start();
使用標誌或東西,知道什麼時候該停止運行的工作。 然後使用
scheduler.shutdown();
我如何實現我的要求:
if(flag==true)
{
scheduler.start();
scheduler.scheduleJob(jobDetail, simpleTrigger);
}
else if(flag==false)
{
scheduler.shutdown();
}
其中的JobDetail和simpleTrigger不言自明。
希望它有幫助。 :)
+7
此解決方案將關閉整個計劃程序,除非您將一個作業分配給計劃程序,否則這種方法並不正確。您應該有辦法只刪除特定的作業,而不是整個調度程序,因爲可能有多個作業在同一個調度程序上運行。 – Salman
相關問題
- 1. 如何停止或暫停石英工作
- 2. 是停止當前正在運行的
- 3. 停止當前正在運行的writeToFile:
- 4. 如何手動停止/中斷石英調度程序作業
- 5. 石英工作未運行
- 6. 如何正確停止當前正在運行的xCode項目?
- 7. 當Tomcat死亡時石英當前正在執行的作業
- 8. 石英作業未運行,但石英錶正在更新
- 9. 如何暫停或停止當前正在播放的音頻?
- 10. Resque工作,如何停止正在運行的任務
- 11. 當其他方法正在運行時gif停止工作c#
- 12. 運行石英工作同步
- 13. 如何停止石英計劃程序中的特定作業
- 14. 在一段時間後停止執行當前正在運行的作業
- 15. 如何防止石英作業多次運行
- 16. 當前正在運行的動畫完成後停止StoryBoard
- 17. 如何停止正在運行的ASIHTTPNetworkQueue?
- 18. 如何在C中停止/銷燬正在運行的操作#
- 19. Azure App Service上的石英停止工作
- 20. 服務器關閉時,當前正在運行的石英工作會發生什麼
- 21. 如何停止當前線程以外的所有正在運行的線程?
- 22. 停止一個php無限循環 - 當前正在運行
- 23. 石英調度器當前作業正在增加
- 24. 如何知道當前正在運行的線程並將其停止iOS
- 25. 如何在不停止批處理的情況下停止當前正在運行的cmd進程?
- 26. 中斷石英集羣中的作業
- 27. 停止運行'worksheet_change'或工作表_計算運行
- 28. 如何退出或停止正在運行的線程?
- 29. 如何停止或破壞正在運行的線程
- 30. 如何暫停當前正在運行的進程
Thx))))))))))) – user253202
此方法的限制是**不** **羣集意識。 Java doc: *此方法不支持羣集。也就是說,它只會中斷當前在此計劃程序實例中執行的InterruptableJob的實例,而不會在整個羣集中執行。* –