9

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

4

2 回答 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 回答