当Tomcat被杀死时,Quartz当前正在执行作业

use*_*731 7 java tomcat quartz-scheduler

我不清楚的事情.假设我在一天中随机安排了工作,每个工作需要30分钟才能运行.假设我有五个这样的工作正在运行而且Tomcat被杀死了.当我使用我的应用程序启动Tomcat时,是否重新启动作业,或者当前正在运行的作业因为已经被解雇而丢失了?

zer*_*iko 14

简而言之,默认情况下,当前正在运行的作业被视为已触发并且未被恢复

.. 但是你可以在构建一个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();

...
Run Code Online (Sandbox Code Playgroud)