我有一个使用石英 1.5.0 的旧版 Web 应用程序,使用 fulcrum包装。
系统崩溃后,重新启动 Apache tomcat(托管应用程序)时出现错误:
Caused by: org.quartz.ObjectAlreadyExistsException: Unable to store Trigger with name: 'xxx' and group: 'yyy', because one already exists with this identification.
at org.quartz.simpl.RAMJobStore.storeTrigger(RAMJobStore.java:309)
at org.quartz.core.QuartzScheduler.scheduleJob(QuartzScheduler.java:652)
at org.quartz.impl.StdScheduler.scheduleJob(StdScheduler.java:249)
at org.apache.fulcrum.quartz.impl.DefaultQuartzScheduler.initialize(DefaultQuartzScheduler.java:170)
at org.apache.fulcrum.yaafi.framework.container.ServiceComponentImpl.initialize(ServiceComponentImpl.java:280)
at org.apache.fulcrum.yaafi.framework.container.ServiceContainerImpl.incarnate(ServiceContainerImpl.java:472)
at org.apache.fulcrum.yaafi.framework.container.ServiceContainerImpl.incarnate(ServiceContainerImpl.java:522)
at org.apache.fulcrum.yaafi.framework.container.ServiceContainerImpl.initialize(ServiceContainerImpl.java:201)
at org.apache.fulcrum.yaafi.framework.factory.ServiceManagerFactory.create(ServiceManagerFactory.java:141)
at org.apache.turbine.services.yaaficomponent.TurbineYaafiComponentService.init(TurbineYaafiComponentService.java:194)
... 13 more
Quartz 配置(文件quartz.properties):
org.quartz.scheduler.instanceName = DefaultQuartzScheduler
org.quartz.scheduler.rmi.export = false
org.quartz.scheduler.rmi.proxy = false
org.quartz.scheduler.wrapJobExecutionInUserTransaction = false
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 1
org.quartz.threadPool.threadPriority = 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true
org.quartz.jobStore.misfireThreshold = 60000
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
据我所知,石英时间表存储在 RAM 中。正确的?
问题1:我试过重启tomcat,甚至整个虚拟机。为什么错误仍然存在?我想应该清除 RAM,一切都应该重新启动。
问题 2:假设我错过了什么,石英作业可以存储在哪里?我查看了系统的数据库,但找不到任何相关信息。
问题 3:我可以在不更改应用程序代码的情况下强制重启quartz吗?
请注意,这是一个遗留的 Web 应用程序,我什至没有它的源代码。