石英错误失火处理和工作恢复失败



我是JSP和Quartz调度的新手!在这个项目中,我试图使quartz调度器在服务器关闭的情况下继续工作,然后忽略错过的作业。

为此,我研究了JobPersistence,并修改了石英。属性文件如下所示:

org.quartz.threadPool.threadCount=5
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.tablePrefix = QRTZ_
org.quartz.jobStore.useProperties = true
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.dataSource = myDB
org.quartz.dataSource.myDB.driver = com.mysql.jdbc.Driver
org.quartz.dataSource.myDB.URL = jdbc:mysql://localhost:3306/contacts
org.quartz.dataSource.myDB.user = root
org.quartz.dataSource.myDB.password = root

web.xml文件包含以下内容:

...
<listener>
   <listener-class>
      org.quartz.ee.servlet.QuartzInitializerListener
   </listener-class>
</listener>
...

我已经将表添加到DB中,当我选择时,我可以看到它确实将触发器插入到表中。

触发器按如下方式构建:

Trigger trig = TriggerBuilder
  .newTrigger()
  .startAt(scal.getTime())
  .withSchedule(
     SimpleScheduleBuilder.simpleSchedule()
    .withIntervalInMinutes(minutes).repeatForever())
  .endAt(ecal.getTime()).build();

现在,当我运行我的web应用程序时,我调度一个作业并执行它。然后,关闭tomcat服务器并重新启动它。它将以下错误打印到记录器:

org.quartz.SchedulerConfigException: Failure occured during job recovery. [See nested exception: org.quartz.JobPersistenceException: Couldn't recover jobs: null [See nested exception: java.lang.NullPointerException]]

我已经尝试在MySQLWorkbench中执行以下语句一次:

UPDATE QRTZ_TRIGGERS SET NEXT_FIRE_TIME=1 WHERE NEXT_FIRE_TIME < 0;

现在,我得到了这个新的错误:

.manage - MisfireHandler: Error handling misfires: Unexpected runtime exception: null
org.quartz.JobPersistenceException: Unexpected runtime exception: null [See nested exception: java.lang.NullPointerException]

如果你想让我编辑并包含stackTrace,我可以这样做…

删除useProperties = true并替换为

org.quartz.scheduler.misfirePolicy =  doNothing

去除UPDATE

删除触发器顶部的任何.withMisfireHandling()方法,并删除JobDetail上的.requestRecovery(true)方法,以防您使用它。

同时,确保你没有取消作业,以防它存在…

最新更新