Java 终止Tomcat时当前正在执行的作业

Java 终止Tomcat时当前正在执行的作业,java,tomcat,quartz-scheduler,Java,Tomcat,Quartz Scheduler,有些事我不清楚。假设我每天都有随机安排的作业,每个作业需要30分钟才能运行。假设我有五份这样的工作,Tomcat被杀了。当我用我的应用程序启动Tomcat时,作业是否会重新启动,或者当前正在运行的作业是否会因为已经启动而丢失?Tomcat不关心您的作业。关闭webapp时,您的任务是在webapp中正确终止作业。简短回答,默认情况下,当前运行的作业被视为已启动,不会恢复 ..但您可以在构建作业(JobDetail)时设置requestRecovery属性,以告知Quartz在崩溃时恢复正在运行的

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

Tomcat不关心您的作业。关闭webapp时,您的任务是在webapp中正确终止作业。

简短回答,默认情况下,当前运行的作业被视为已启动,不会恢复

..但您可以在构建作业(JobDetail)时设置requestRecovery属性,以告知Quartz在崩溃时恢复正在运行的作业,也称为“硬关机”

引用页面底部的官方文件:

请求恢复-如果作业“请求恢复”,并且它在恢复期间执行 调度程序的“硬关闭”(即它正在运行的进程 在崩溃或机器关闭的情况下),然后重新执行 当计划程序再次启动时。在这种情况下 JobExecutionContext.isRecovering()方法将返回true

因此,您可以执行以下操作,例如:

import static org.quartz.JobBuilder.*;

...

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

...

我所追求的是Quartz是否重试当前正在执行的作业,还是将它们丢弃,这意味着Quartz无法从jvm崩溃中完全恢复,因为用户无法“正确终止作业”