一尘不染

Tomcat被杀死时的Quartz当前执行作业

tomcat

我不清楚。假设我整天随机安排工作,每个工作需要30分钟才能运行。假设我有五个作业正在运行,Tomcat被杀死。当我使用应用程序启动Tomcat时,作业会重新启动吗?或者当前正在运行的作业是否已经被触发而丢失了?


阅读 301

收藏
2020-06-16

共1个答案

一尘不染

简短回答,默认情况下,当前正在运行的作业被视为已触发并且无法恢复

.. 您可以在构建Job(JobDetail)时设置 requestRecovery
属性,以告诉Quartz在发生崩溃(也称为“硬关机”)的情况下恢复正在运行的Jobs。

引用官方文档这里在页面的底部:

RequestsRecovery-
如果作业“请求恢复”,并且在调度程序的“硬关闭”期间正在执行(即,正在崩溃中运行的进程,或者计算机已关闭),则将重新执行该作业再次启动调度程序时。在这种情况下,JobExecutionContext.isRecovering()方法将返回true。

因此,您可以例如:

import static org.quartz.JobBuilder.*;

...

JobDetail job = newJob(MyJob.class)
           .withIdentity("myJob", "group1")
           .requestRecovery(true) //This is the guy!
           .build();

...
2020-06-16