Java 石英-重新启动调度程序
我在一些Java战争中使用Quartz Scheduler(v2.2.1),从数据库错误中恢复时遇到一些问题。战争部署在JBOSS AS 7.1中 在WAR的初始化过程中,我启动了两个调度程序:第一个配置了JobStoreTX作为clustered(WAR部署在一个集群中),第二个配置了RAMJobStore,以便监视一些特定于服务器的设置 RAM调度程序还包括一个作业,用于监视MySQL数据库中的表。在发生错误的情况下,最好保持Quartz作业启动,但事实是,有时调度程序被冻结,而这些作业不会启动 例如,我在测试中使用了以下方法,但没有成功地重新实例化调度程序:Java 石英-重新启动调度程序,java,mysql,jboss,cluster-computing,quartz-scheduler,Java,Mysql,Jboss,Cluster Computing,Quartz Scheduler,我在一些Java战争中使用Quartz Scheduler(v2.2.1),从数据库错误中恢复时遇到一些问题。战争部署在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
由于调度程序对象似乎是相同的…我修改了该方法,但运气不好,在调用shutdown之前重新实例化了StdSchedulerFactory和调度程序
你能提供一些功能性的例子吗
谢谢你说调度程序被冻结意味着API有一个巨大的bug。请您提供堆栈跟踪或您提到的案例中抛出的任何错误 根据我的经验,调度程序返回的对象将与您调用的次数相同 schedFactory.getScheduler() 您可能需要清理旧作业、取消引用它们或停止它们 正确的步骤是 -1-获取调度程序对象 -2-通过调用scheduler.shutdown()停止计划程序 -3-再次加载作业并启动调度程序
使用quartz JMX选项,MBean具有诸如
start()
、shutdown()
和clear()
等操作,使生活更加简单。我还尝试调用shutdown。如果您查看我的代码,它会被注释,因为应用程序在这一点上卡住了:(我尝试了几件事情,但没有成功……我无法提供堆栈跟踪,因为我没有检测到任何警告或错误(我的日志记录系统具有警告级别)。