【问题标题】:Quartz Error Misfire Handling and Failure on Job RecoveryQuartz 错误失火处理和作业恢复失败
【发布时间】:2015-07-15 06:30:07
【问题描述】:

我是 JSP 和 Quartz 调度的新手!在这个项目中,我试图让石英调度程序继续运行,以防服务器关闭然后忽略错过的作业。

为此,我研究了 JobPersistence 并修改了quartz.properties 文件如下:

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>
...

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

触发器的构建如下:

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

现在,当我运行我的网络应用程序时,我会安排一个作业并执行它。然后,我关闭了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,我可以这样做...

【问题讨论】:

    标签: java jsp persistence quartz-scheduler job-scheduling


    【解决方案1】:

    删除useProperties = true 并将其替换为

    org.quartz.scheduler.misfirePolicy =  doNothing
    

    删除UPDATE

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

    另外,如果作业存在,请确保不要取消它...

    【讨论】:

    • 非常感谢!我保留了useProperties 问题主要是在取消作业/:
    • 这里有几件事情:1.它不能解决触发器重新运行的目的,如果出现故障2.提到属性更改,它是否也在触发器表中清理?
    猜你喜欢
    • 2016-03-12
    • 1970-01-01
    • 2018-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-04
    相关资源
    最近更新 更多