Согласно документации 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.x org.quartz.JobDetail
имеет сеттер public void setRequestsRecovery(boolean shouldRecover)
.
Но если мы используем Quartz 2.x реализацию Spring3, то вышеупомянутая конфигурация изменится следующим образом:
<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?