【发布时间】:2013-11-11 10:43:39
【问题描述】:
我在一些 Java WAR 中使用 Quartz Scheduler (v2.2.1),在从数据库错误中恢复时遇到了一些麻烦。 WAR 部署在 JBOSS AS 7.1 中。
在 WAR 的初始化中,我启动了两个调度器:第一个将 JobStoreTX 配置为 clustered(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
由于 Scheduler 对象似乎是相同的...我修改了方法,但没有运气,在调用关闭之前重新实例化 StdSchedulerFactory 和 Scheduler。
您能提供任何功能示例吗?
谢谢
【问题讨论】:
标签: java mysql jboss cluster-computing quartz-scheduler