Quartz 错误 Misfire 处理和作业恢复失败
Quartz Error Misfire Handling and Failure on Job Recovery
我是 JSP 和 Quartz 调度的新手!在这个项目中,我试图让 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>
...
我已将表添加到数据库中,当我 select 时,我可以看到它确实向其表中插入了触发器。
触发器构建如下:
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,我可以做到...
删除 useProperties = true
并将其替换为
org.quartz.scheduler.misfirePolicy = doNothing
删除 UPDATE
删除触发器顶部的所有 .withMisfireHandling()
方法,并删除 JobDetail
上的 .requestRecovery(true)
以防您使用它。
此外,请确保您不会取消作业,以防它存在...
我是 JSP 和 Quartz 调度的新手!在这个项目中,我试图让 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>
...
我已将表添加到数据库中,当我 select 时,我可以看到它确实向其表中插入了触发器。
触发器构建如下:
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,我可以做到...
删除 useProperties = true
并将其替换为
org.quartz.scheduler.misfirePolicy = doNothing
删除 UPDATE
删除触发器顶部的所有 .withMisfireHandling()
方法,并删除 JobDetail
上的 .requestRecovery(true)
以防您使用它。
此外,请确保您不会取消作业,以防它存在...