我不清楚的东西。假设我全天随机安排工作,每个工作需要 30 分钟才能运行。假设我有五个这样的作业正在运行,而 Tomcat 被杀死了。当我使用我的应用程序启动 Tomcat 时,作业是否会重新启动,或者当前正在运行的作业是否因为它们已经被解雇而丢失?
问问题
4612 次
2 回答
17
简短的回答,默认情况下,当前正在运行的作业被视为已解雇并且不会恢复
..但是您可以在构建 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();
...
于 2013-10-02T21:09:33.910 回答
0
Tomcat 不关心你的工作。您的任务是在 webapp 关闭时正确终止该作业。
于 2013-10-02T16:56:39.423 回答