我有一些任务是在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. 停止当前正在运行的writeToFile:
- 3. 石英工作未运行
- 4. 停止当前正在运行的cron作业(ISP经理)
- 5. 当其他方法正在运行时gif停止工作c#
- 6. 运行石英工作同步
- 7. 如何停止石英计划程序中的特定作业
- 8. 在一段时间后停止执行当前正在运行的作业
- 9. 如何防止石英作业多次运行
- 10. 如何停止正在运行的ASIHTTPNetworkQueue?
- 11. Azure App Service上的石英停止工作
- 12. 如何停止当前线程以外的所有正在运行的线程?
- 13. 石英调度器当前作业正在增加
- 14. 如何在不停止批处理的情况下停止当前正在运行的cmd进程?
- 15. 停止运行'worksheet_change'或工作表_计算运行
- 16. 如何退出或停止正在运行的线程?
- 17. 如何停止或破坏正在运行的线程
- 18. adb在运行sshuttle后停止工作
- 19. 如何在Spyder 3.5中运行当前行(ctrl + f10不工作)
- 20. 如何暂停石英调度器的工作?
- 21. Sidekiq:停止正在运行的工作人员
- 22. 停止正在运行的mcparallel工作过早
- 23. 如何停止GCM当应用程序正在运行
- 24. 在Visual Studio中停止当前操作
- 25. 石英防止作业执行jobToBeExecuted
- 26. // @ ts-check在当前版本的vscode中停止工作
- 27. 如何知道Apache Spark中当前正在运行哪个阶段的工作?
- 28. 石英@DisallowConcurrentExecution不能正常工作
- 29. 如何使mysqld的停止运行,当福尔曼(Procfile)停止运行
- 30. 如何停止正在运行的WCF服务在Silverlight中,当发生异常
Thx))))))))))) – user253202
此方法的限制是**不** **群集意识。 Java doc: *此方法不支持群集。也就是说,它只会中断当前在此计划程序实例中执行的InterruptableJob的实例,而不会在整个群集中执行。* –