bean类的属性“持久性”无效[org.springframework.scheduling.quartz.SchedulerFactoryBean]

时间:2016-04-27 14:59:48

标签: quartz-scheduler spring-4

我正在将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>

有什么建议吗? 提前谢谢。

3 个答案:

答案 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();