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

Java 石英错误失火处理和作业恢复失败,java,jsp,persistence,quartz-scheduler,job-scheduling,Java,Jsp,Persistence,Quartz Scheduler,Job Scheduling,我不熟悉JSP和Quartz调度!在这个项目中,我试图让quartz调度器在服务器关闭的情况下继续工作,然后忽略丢失的作业 为此,我研究了JobPersistence,并对quartz.properties文件进行了如下修改: org.quartz.threadPool.threadCount=5 org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX org.quartz.jobStore.tablePrefix

我不熟悉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
...
<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();
web.xml文件包含以下内容:

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
...
<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();
现在,当我运行我的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;

如果您希望我编辑并包含stackTrace,我可以这样做…

删除
useProperties=true
并将其替换为

org.quartz.scheduler.misfirePolicy =  doNothing
删除
更新

删除触发器顶部的任何
.withMisfireHandling()
方法,并删除
作业详细信息
上的
.requestRecovery(true)
,以防您使用它


此外,请确保在作业存在的情况下不要取消作业…

非常感谢!我保留了
useProperties
问题主要在于取消作业/:这里有两件事:1。如果出现故障2,则无法解决重新运行触发器的目的。提到属性更改后,它是否也会在触发器表中进行清理?