根据 Quartz 2 的文档
RequestsRecovery - 如果一个作业“请求恢复”,并且它在调度程序的“硬关闭”期间执行(即它在崩溃中运行的进程,或者机器被关闭),那么它会被重新执行当调度程序再次启动时。在这种情况下,JobExecutionContext.isRecovering() 方法将返回 true。
Spring3 支持 Quartz 1.x 和 Quartz 2.x。如果我们使用 Quartz 1.x 那么我们需要使用以下配置来创建JobDetail
bean:
<bean id="ldapSynch" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass" value="com.edfx.adb.scheduling.job.LDAPSynchronizer" />
<property name="requestsRecovery" value="true" />
</bean>
内部org.springframework.scheduling.quartz.JobDetailBean
扩展org.quartz.JobDetail
,并且在 Quartz 1.xorg.quartz.JobDetail
中有一个 setter public void setRequestsRecovery(boolean shouldRecover)
。
但是如果我们使用 Spring3 的 Quartz 2.x 实现,则上述配置更改为:
<bean id="ldapSynch" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<property name="jobClass" value="com.edfx.adb.scheduling.job.LDAPSynchronizer" />
<property name="requestsRecovery" value="true" />
</bean>
而且在 Quartz 2.x 中也没有这样org.quartz.JobDetail
的类,而是一个interface
并且最终org.springframework.scheduling.quartz.JobDetailFactoryBean
不再接受参数<property name="requestsRecovery" value="true" />
。
我们怎么能把这个重要的东西传递parameter
给 Quartz 的调度器呢?