当Tomcat被关闭时,Quartz当前正在执行的作业是什么?

11

我有一个问题不太清楚。假设我有一些随机安排在全天的工作,每个工作需要运行30分钟。如果我有五个正在运行的工作,然后Tomcat停止了。当我重新启动我的应用程序时,这些任务会重新启动吗?还是已经执行的任务会丢失?

2个回答

23

简单来说,默认情况下,正在运行的作业(Jobs)被视为已终止且不会恢复。

..但是,您可以在构建作业(JobDetail)时设置requestRecovery属性,告诉Quartz在崩溃时重新启动该运行中的作业,也就是所谓的“硬关闭”。

引用官方文档此处底部的说明:

RequestsRecovery——如果一个job“请求恢复”,并且在调度器(即运行进程崩溃或机器关机)进行“硬关闭”期间执行,则在调度器再次启动时将重新执行它。在这种情况下,JobExecutionContext.isRecovering()方法将返回true。

因此,您可以通过以下方式实现:

import static org.quartz.JobBuilder.*;

...

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

...

-1

Tomcat并不关心你的工作。当它关闭时,正确终止你的Web应用程序中的任务是你的任务。


1
我想知道的是Quartz是否会重试当前正在执行的作业,还是扔掉它们,也就是说,Quartz无法从JVM崩溃中恢复,用户没有办法“正确终止作业”。 - user671731

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接