我正在将Spring从Spring 2.x升级到Spring 4.2.4,将Quartz从1.8升级到2.3
以下bean抛出“bean类的无效属性'持久性'[org.springframework.scheduling.quartz.SchedulerFactoryBean]”
如果我删除了耐久性属性,我会得到“org.quartz.SchedulerException:添加了没有触发器的作业必须是持久的”
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="durability" value="true"/>
<property name="recover" value="false"/>
<property name="jobDetails">
<list>
<ref bean="deleteTempFileJobScheduler" />
</list>
</property>
<property name="triggers">
<list>
<ref bean="deleteTempFileJobSchedulerTrigger" />
</list>
</property>
</bean>
有什么建议吗? 提前谢谢。
答案 0 :(得分:0)
Quartz-Job有一个名为durability的属性。
此属性确定是否应自动删除没有触发器的作业。
即。如果你设置
<property name="durability" value="true"/>
比乔布斯留在JobStore中,即使没有触发器指向它。
但如果你设置
<property name="durability" value="false"/>
如果没有触发器指向它,则应从JobStore中删除作业。 在这种情况下,如果您尝试将没有触发器的作业添加到JobStore,Quartz会为您提供上述异常(因为您添加了一个将立即删除的作业)。
为防止出现此类异常,您可以将Job与Trigger一起添加到JobStore。
答案 1 :(得分:0)
您需要将durability
属性设置为JobDetailFactoryBean
(在您的情况下,这是deleteTempFileJobScheduler
)而不是SchedulerFactoryBeam
答案 2 :(得分:0)
当我们自己创建作业时,您可以添加 storeDurably(true) 。这对我有用。
JobDetail job = newJob(JobScheduler.class)
.withIdentity( sc.getId()+ "_Job")
.usingJobData(getJobDataMap(sc))
.storeDurably(true)
.build();