如何在CronTrigger中更改cron表达式(quartz 2.2,spring 4.1)

时间:2014-09-09 06:32:41

标签: java spring cron quartz-scheduler

我有点卡在移植到最新的石英2.2和弹簧4.1 ......这里是一个cron触发器,为了清晰起见,我省略了工作和其他绒毛:

...
       <bean id="timeSyncTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
         <property name="jobDetail" ref="timeSyncJob"/>
         <property name="startDelay" value="10000"/>
         <property name="cronExpression" value="0 0 1 * * ? *"/>
       </bean>
...

现在,我需要在运行时更改其 cronExpression ,并不像我想象的那么简单。我无法引用bean并更改属性,因为它的工厂提供了 CronTrigger 接口,而该接口又不再具有 setCronExpression 方法,它具有变得一成不变。之前我可以简单地从上下文中取出一个触发器并设置其新的cron表达式。多年来它一直运作良好,直到升级变得不可避免。

那么,我们今天如何完成这项简单的任务呢?完全丢失了文档和版本..提前感谢!

2 个答案:

答案 0 :(得分:5)

除了CronTriggerFactoryBean之外,您可能还有一个SchedulerFactoryBean,它可以访问Quartz调度程序以及CronTrigger。 Quartz调度程序允许您使用新的/修改的触发器重新安排作业:

@Autowired private SchedulerFactoryBean schedulerFactoryBean;
...
public void rescheduleCronJob() {

    String newCronExpression = "..."; // the desired cron expression

    Scheduler scheduler = schedulerFactoryBean.getScheduler();
    TriggerKey triggerKey = new TriggerKey("timeSyncTrigger");
    CronTriggerImpl trigger = (CronTriggerImpl) scheduler.getTrigger(triggerKey);
    trigger.setCronExpression(newCronExpression );
    scheduler.rescheduleJob(triggerKey, trigger);
}

答案 1 :(得分:2)