我在一些 Java WAR 中使用 Quartz Scheduler (v2.2.1),在从数据库错误中恢复时遇到了一些麻烦。WAR 部署在 JBOSS AS 7.1 中。
在 WAR 的初始化中,我启动了两个调度程序:第一个配置了JobStoreTX作为集群(WAR 部署在一个集群中),第二个配置了RAMJobStore以监控一些服务器特定的设置。
RAM 调度程序还包括一个作业,它监视MySQL数据库中的表。如果出现错误,最好保持 Quartz 作业被触发,但事实上有时调度程序被冻结并且这些作业不会被触发。
例如,我在测试中使用了以下方法,但没有运气重新实例化调度程序:
/**
* Resets all scheduled jobs.
*/
public void reset(final long currentTime) {
try {
final StdSchedulerFactory schedFactory = new StdSchedulerFactory();
schedFactory.initialize("quartz.properties");
Scheduler myScheduler = schedFactory.getScheduler();
if (myScheduler != null) {
myScheduler.clear();
myScheduler.shutdown(); --> HERE, THE THREAD IS LOCKED !!!
myScheduler = null;
}
myScheduler = schedFactory.getScheduler();
loadJobs(myScheduler);
myScheduler.start();
//myScheduler.startDelayed(10);
} catch (SchedulerException e) {
LOG.error("Scheduler error !!!");
}
}
重启 Quartz 调度器的正确方法是什么?
提前致谢
更新 1
由于调度程序对象似乎是相同的......我修改了方法,没有运气,在调用关闭之前重新实例化 StdSchedulerFactory 和调度程序。
您能提供任何功能示例吗?
谢谢