我有一个问题不太清楚。假设我有一些随机安排在全天的工作,每个工作需要运行30分钟。如果我有五个正在运行的工作,然后Tomcat停止了。当我重新启动我的应用程序时,这些任务会重新启动吗?还是已经执行的任务会丢失?
我有一个问题不太清楚。假设我有一些随机安排在全天的工作,每个工作需要运行30分钟。如果我有五个正在运行的工作,然后Tomcat停止了。当我重新启动我的应用程序时,这些任务会重新启动吗?还是已经执行的任务会丢失?
简单来说,默认情况下,正在运行的作业(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();
...
Tomcat并不关心你的工作。当它关闭时,正确终止你的Web应用程序中的任务是你的任务。