当Tomcat被杀死时,Quartz当前正在执行作业

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

简而言之,默认情况下,当前正在运行的作业被视为已触发并且未被恢复

.. 但是你可以在构建一个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(); ... 

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