我不清楚的事情。假设我在一天中随机安排了工作,每个工作需要30分钟才能运行。假设我有五个这样的工作正在运行而且Tomcat被杀死了。当我使用我的应用程序启动Tomcat时,是否重新启动作业,或者当前正在运行的作业因为已经解雇而丢失了?
答案 0 :(得分:14)
简短回答,默认情况下,当前正在运行的作业被视为已解雇且无法恢复
.. 但您可以在构建作业(JobDetail)时设置 requestRecovery 属性,以告知Quartz在发生崩溃时恢复正在运行的作业,即“硬关机”
引用页面底部的官方文档here:
RequestsRecovery - 如果作业“请求恢复”,并且它正在执行 调度程序的“硬关闭”(即它正在运行的进程) 在崩溃中,或机器关闭),然后重新执行 当调度程序再次启动时。在这种情况下, JobExecutionContext.isRecovering()方法将返回true。
所以你可以做例如:
import static org.quartz.JobBuilder.*;
...
JobDetail job = newJob(MyJob.class)
.withIdentity("myJob", "group1")
.requestRecovery(true) //This is the guy!
.build();
...
答案 1 :(得分:0)
Tomcat不关心你的工作。您的任务是在关闭Web应用程序时正确终止作业。